Partager via


Opérateurs préfixés d'incrémentation et de décrémentation : ++ et --

++ unary-expression –– unary-expression

Notes

L'opérateur de pré-incrémentation (++) ajoute une valeur incrémentée à son opérande. Cette valeur est le résultat de l'expression. L'opérande doit être une l-value autre que de type const. Le résultat est une l-value du même type que l'opérande.

L'opérateur de pré-décrémentation (––) est analogue à l'opérateur de pré-incrémentation sauf que l'opérande est décrémenté par un et que le résultat est cette valeur décrémentée.

Les opérateurs préfixés et suffixés d'incrémentation et de décrémentation affectent leurs opérandes. La différence principale qui les distingue est lorsque l'incrémentation ou la décrémentation se produit dans l'évaluation d'une expression. (Pour plus d'informations, reportez-vous à la rubrique Opérateurs suffixés d'incrémentation et de décrémentation.) Dans leur forme suffixée, l'incrémentation ou la décrémentation ont lieu avant que la valeur ne soit utilisée dans l'évaluation de l'expression. Par conséquent, la valeur de l'expression est différente de la valeur de l'opérande. Dans leur forme suffixée, l'incrémentation ou la décrémentation ont lieu après que la valeur ne soit utilisée dans l'évaluation de l'expression. Par conséquent, la valeur de l'expression est identique à la valeur de l'opérande. Par exemple, le programme suivant affiche ++i = 6 :

// expre_Increment_and_Decrement_Operators.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

int main() {
   int i = 5;
   cout << "++i = " << ++i << endl;
}

Un opérande de type intégral ou virgule flottante est incrémenté ou décrémenté par la valeur 1 entière. Le type du résultat est identique au type d'opérande. Un opérande de type pointeur est incrémenté ou décrémenté par la taille de l'objet qu'il adresse. Un pointeur incrémenté pointe vers l'objet suivant. Un pointeur décrémenté pointe vers l'objet précédent.

Étant donné que les opérateurs d'incrémentation et de décrémentation ont des effets secondaires, l'utilisation d'expressions avec les opérateurs d'incrémentation ou de décrémentation dans une macro de préprocesseur peut entraîner des résultats indésirables. Considérez cet exemple :

// expre_Increment_and_Decrement_Operators2.cpp
#define max(a,b) ((a)<(b))?(b):(a)

int main()
{
   int i = 0, j = 0, k;
   k = max( ++i, j );
}

La macro se développe pour donner :

k = ((++i)<(j))?(j):(++i);

Si i est supérieur ou égal à j ou inférieur à j par 1, il est incrémenté deux fois.

Notes

Les fonctions inline C++ sont préférables aux macros dans de nombreux cas car elles éliminent des effets secondaires tels que ceux décrits ici et permettent au langage d'effectuer une vérification de type plus complète.

Voir aussi

Référence

Expressions avec opérateurs unaires

Opérateurs C++

Opérateurs, priorité et associativité C++

Concepts

Opérateurs préfixés d'incrémentation et de décrémentation