La différence c'est que dans un cas tu obtiens la valeur après incrémentation et dans l'autre avant.
int i = 0;
int j = ++i; // j vaut 1
Et dans l'autre cas :
int i = 0;
int j = i++; // j vaut 0
Il fut un temps, la pre-incrémentation était « le standard » lorsqu'on voulait pas utiliser la valeur de retour. Car à la différence de la post-incrémentation, la pré-incrementation n'a pas besoin de valeur intermédiaire avant de retourner l'incrémentation, ce qui en terme de code assembleur génère moins d'instructions.
Ainsi, si on devait implémenter nous même la post-incrémentation, ça ressemblerait à :
int tmp = i;
i += 1;
return tmp;
Donc il n'est pas rare de voir beaucoup de code utiliser la pré-incrementation partout où on se fiche de sa valeur précédente. Exemple :
for (int i = 0; i < 10; ++i)
printf("%d\n", i);
- Edité par markand 16 octobre 2019 à 11:44:22
git is great because Linus did it, mercurial is better because he didn't.
Dans le cas où l'expression n'est constituée que de la seule incrémentation i++ et ++i sont finalement totalement équivalent si on veut incrémenter i. Ainsi :
for (int i = 0; i < 10; ++i) {}
for (int i = 0; i < 10; i++) {}
sont totalement équivalents. En C++ même seule dans l'expression, il peut y avoir un écart de performance. C'est pourquoi on voit plus souvent la première forme qui est plus performante pour des types autre que int chez ceux qui pratiquent le C++. En langage C les 2 sont vraiment totalement équivalentes dans ce cas.
Non, le paramètre supplémentaire de operator++ en C++ sert juste à distinguer, syntaxiquement, la pré-incrémentation de la post incrémentation, qui s'appellent tous les deux operator++.
Le problème est dans la construction d'une copie.
Supposons qu'on ait une classe Truc. La post incrémentation doit retourner l'état d'_avant_ la modif. Donc en avoir fait une copie.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.
En recherche d'emploi.