Disclaimer : conosco perfettamente la semantica di incremento prefisso e postfisso. Quindi per favore non spiegarmi come funzionano.
Leggendo le domande sullo stack overflow, non posso fare a meno di notare che i programmatori vengono confusi dall'operatore di incremento postfisso più e più volte. Da ciò deriva la seguente domanda: esiste un caso d'uso in cui l'incremento postfisso fornisce un vantaggio reale in termini di qualità del codice?
Permettimi di chiarire la mia domanda con un esempio. Ecco un'implementazione super-tersa di strcpy
:
while (*dst++ = *src++);
Ma questo non è esattamente il codice più autoreferenziale del mio libro (e produce due fastidiosi avvertimenti su compilatori sane). Allora, cosa c'è di sbagliato con la seguente alternativa?
while (*dst = *src)
{
++src;
++dst;
}
Possiamo quindi sbarazzarci del compito di confusione nella condizione e ottenere un codice completamente privo di avvisi:
while (*src != 'while (*dst++ = *src++);
')
{
*dst = *src;
++src;
++dst;
}
*dst = 'while (*dst = *src)
{
++src;
++dst;
}
';
(Sì, lo so, src
e dst
avranno valori finali diversi in queste soluzioni alternative, ma poiché strcpy
torna immediatamente dopo il ciclo, in questo caso non ha importanza.)
Sembra che lo scopo dell'aumento postfisso sia quello di rendere il codice il più conciso possibile. Semplicemente non riesco a vedere come questo sia qualcosa per cui dovremmo lottare. Se questo era originariamente sulle prestazioni, è ancora attuale oggi?