Opérateurs ++ et —
Ce court article a pour objectif de répondre à une question fondamentale et dont la plupart des programmeurs ont une réponse erronée : Quelle est la différence entre i++ et ++i ?
Avant de donner la réponse, une petite question pour se mettre en situation : Quelles vont être les valeurs de j et de k à la fin de l’exécution de ce code ?
int i = 5; int j = ++i + i--; int k = i++ + --i;
On dit souvent que l’opération ++i est moins prioritaire que i++, ou encore que i++ incrémente la variable après tandis que i-- l’incrémente avant. En réalité, l’opérateur unaire ++ (ou –) effectue la même action, qu’il soit placé avant ou après la variable : il incrémente celle-ci. Après l’exécution de l’opération, la variable est donc directement à la nouvelle valeur. Par exemple, s’il était possible de mettre en pause l’exécution du code int i = 5; j = i++ * 2; juste avant la multiplication, on pourrait constater que la variable i vaut bien 6. Cependant, la différence provient de la valeur retournée par l’opération. La valeur de l’opération ++i est celle de la nouvelle valeur de i, après incrémentation, tandis que i++ retourne l’ancienne valeur de i, avant incrémentation.
Ainsi, la réponse à la question du début de l’article est : j = 12, k = 10.
En effet, dans l’expression de j, ++i retourne la valeur de i après incrémentation, soit 6. Ensuite, i-- retourne la valeur de i avant décrémentation, soit 6 aussi, tandis que i retourne à sa valeur initiale 5. On obtient donc j = 6 + 6 = 12. Pour k, c’est l’inverse : la valeur avant incrémentation est d’abord renvoyée (5) tandis que i a comme nouvelle valeur 6, puis avec --i c’est la valeur de i après décrémentation qui est retournée, soit 5. k = 5 + 5 = 10.