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, srce dstavranno valori finali diversi in queste soluzioni alternative, ma poiché strcpyritorna 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++;
strcpymetodo in questo modo (per motivi che hai già menzionato).