La différence entre le postfix incrément, x++
et le préfixe incrément, ++x
est précisément dans comment les deux opérateurs évaluent leurs opérandes. L'incrément postfixe copie conceptuellement l'opérande en mémoire, incrémente l'opérande original et finalement donne la valeur de la copie. Je pense que la meilleure façon d'illustrer cela est d'implémenter l'opérateur dans le code :
int operator ++ (int& n) // postfix increment
{
int tmp = n;
n = n + 1;
return tmp;
}
Le code ci-dessus ne compilera pas car vous ne pouvez pas redéfinir les opérateurs pour les types primitifs. Le compilateur ne peut pas non plus dire qu'ici nous définissons un opérateur postfix plutôt que l'opérateur préfixe mais faisons comme si c'était un C++ correct et valide. Vous pouvez voir que l'opérateur postfixe agit effectivement sur son opérande, mais il renvoie l'ancienne valeur avant l'incrémentation, donc le résultat de l'expression x++
est la valeur avant l'incrément. x
Cependant, est incrémenté.
Le préfixe d'incrémentation incrémente également son opérande, mais il donne la valeur de l'opérande après l'incrément :
int& operator ++ (int& n)
{
n = n + 1;
return n;
}
Cela signifie que l'expression ++x
est évalué à la valeur de x
après l'incrément.
Il est facile de penser que l'expression ++x
est donc équivalent à l'assignmnet (x=x+1)
. Toutefois, ce n'est pas exactement le cas, car une incrémenter est une opération qui peut signifier différentes choses dans différents contextes. Dans le cas d'un simple entier primitif, en effet ++x
est substituable à (x=x+1)
. Mais dans le cas d'un type de classe, tel qu'un itérateur d'une liste chaînée, un incrément de préfixe de l'itérateur ne signifie certainement pas "ajouter un à l'objet".
2 votes
Duplicata possible de Quelle est la différence entre ++i et i++ ?
0 votes
Ou peut-être Incrémentation en C++ - Quand utiliser x++ ou ++x ? (ou, très probablement, des dizaines d'autres)
0 votes
Si vous comprenez l'hindi :), cela s'explique très clairement. youtube.com/watch?v=yRt-zYFJIvE