Disclaimer : conosco perfettamente la semantica del prefisso e l'incremento postfisso. Quindi per favore non spiegarmi come funzionano.
Leggendo le domande sullo overflow dello stack, non posso fare a meno di notare che i programmatori vengono continuamente confusi dall'operatore di incremento postfix. Da ciò nasce la seguente domanda: esiste qualche caso d'uso in cui l'incremento postfix offre un reale vantaggio in termini di qualità del codice?
Vorrei chiarire la mia domanda con un esempio. Ecco un'implementazione super-concisa di strcpy
:
while (*dst++ = *src++);
Ma questo non è esattamente il codice più auto-documentante nel mio libro (e produce due fastidiosi avvertimenti sui compilatori sani di mente). Quindi cosa c'è che non va nella seguente alternativa?
while (*dst = *src)
{
++src;
++dst;
}
Possiamo quindi eliminare l'incarico confuso nella condizione e ottenere un codice completamente privo di avvisi:
while (*src != '\0')
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
(Sì, lo so, src
e dst
avranno valori finali diversi in queste soluzioni alternative, ma poiché strcpy
ritorna immediatamente dopo il ciclo, in questo caso non importa.)
Sembra che lo scopo dell'incremento postfix sia di rendere il codice il più conciso possibile. Semplicemente non riesco a vedere come questo è qualcosa per cui dovremmo lottare. Se inizialmente si trattava di prestazioni, è ancora rilevante oggi?
int c = 0; c++;
strcpy
metodo in questo modo (per motivi che hai già menzionato).