Operatori di incremento e decremento del prefisso: ++ e --

Sintassi

++ unary-expression
-- unary-expression

Osservazioni:

L'operatore di incremento del prefisso (++) aggiunge uno al relativo operando. Questo valore incrementato è il risultato dell'espressione. L'operando deve essere un valore l-value non di tipo const. Il risultato è un l-value dello stesso tipo dell'operando.

L'operatore di decremento del prefisso (--) è analogo all'operatore di incremento del prefisso, ad eccezione del fatto che l'operando viene decrementato di uno e il risultato è questo valore decrementato.

Visual Studio 2017 versione 15.3 e successive (disponibile in /std:c++17 modalità e versioni successive): l'operando di un operatore di incremento o decremento potrebbe non essere di tipo bool.

Gli operatori di incremento e di decremento sia in forma prefissa sia in forma suffissa hanno impatto sui relativi operandi. La differenza principale tra loro è data dall'ordine in cui avviene l'incremento o il decremento nella valutazione di un'espressione. Per altre informazioni, vedere Operatori di incremento e decremento suffisso. Nel formato prefisso, l'incremento o il decremento viene eseguito prima che il valore venga usato nella valutazione dell'espressione, pertanto il valore dell'espressione è diverso dal valore dell'operando. Nella forma suffissa, l'incremento o il decremento si verifica dopo che il valore viene utilizzato nella valutazione dell'espressione, pertanto il valore dell'espressione è lo stesso dal valore dell'operando. Ad esempio il seguente programma stampa "++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 operando di tipo integrale o mobile viene incrementato o decrementato dell'intero 1. Il tipo del risultato è uguale al tipo di operando. Un operando di tipo puntatore viene incrementato o decrementato alle dimensioni dell'oggetto che indirizza. Un puntatore incrementato punta all'oggetto successivo; mentre un puntatore decrementato punta all'oggetto precedente.

Poiché gli operatori di incremento e decremento hanno effetti collaterali, l'uso di espressioni con operatori di incremento o decremento in una macro del preprocessore può avere risultati indesiderati. Si consideri questo esempio:

// 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 si espande a:

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

Se i è maggiore o uguale a j o minore di j di 1, verrà incrementato due volte.

Nota

Le funzioni inline C++ sono preferibili rispetto alle macro in molti casi perché eliminano gli effetti collaterali come quelli qui riportati, consentono inoltre al linguaggio di eseguire un controllo del tipo più completo.

Vedi anche

Espressioni con operatori unari
Operatori C++, precedenza e associazione
Operatori di incremento e decremento in forma prefissa