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

Syntaxe

++ unary-expression
-- unary-expression

Notes

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

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

Visual Studio 2017 version 15.3 et ultérieures (disponible en mode /std:c++17 et ultérieur) : l’opérande d’un opérateur d’incrémentation ou de décrémentation ne peut pas être de type bool.

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, consultez Opérateurs suffixés d’incrémentation et de décrémentation.) Dans la forme préfixée, l’incrémentation ou la décrémentation a lieu avant que la valeur 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. Prenons 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.

Remarque

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

Expressions avec opérateurs unaires
Opérateurs intégrés, priorité et associativité C++
Opérateurs préfixés d’incrémentation et de décrémentation