Disclaimer : Je connais parfaitement la sémantique de l'incrément de préfixe et de postfix. Alors s'il te plait, ne m'explique pas comment ils fonctionnent.
En lisant les questions sur le dépassement de pile, je ne peux m'empêcher de remarquer que les programmeurs sont confus par l'opérateur d'incrément de postfix, encore et encore. La question suivante se pose: existe-t-il un cas d'utilisation où l'incrémentation postfixée offre un réel avantage en termes de qualité du code?
Permettez-moi de clarifier ma question avec un exemple. Voici une implémentation super-concise de strcpy
:
while (*dst++ = *src++);
Mais ce n'est pas exactement le code le plus auto-documenté de mon livre (et il produit deux avertissements ennuyeux sur des compilateurs sains). Alors, quel est le problème avec l'alternative suivante?
while (*dst = *src)
{
++src;
++dst;
}
Nous pouvons ensuite supprimer la tâche confuse dans la condition et obtenir un code totalement sans avertissement:
while (*src != '\0')
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
(Oui, je sais, src
et dst
ces solutions alternatives auront des valeurs de fin différentes, mais comme strcpy
il revient immédiatement après la boucle, cela n'a pas d'importance dans ce cas.)
Il semble que le but de l’incrément postfix soit de rendre le code le plus concis possible. Je ne vois tout simplement pas à quel point c'est quelque chose que nous devrions nous efforcer. S'il s'agissait à l'origine de performances, est-il toujours d'actualité?
int c = 0; c++;
strcpy
méthode de cette façon (pour les raisons que vous avez déjà mentionnées).