Condividi tramite


Operatori di incremento e decremento in forma prefissa: ++ e --

++ unary-expression –– unary-expression

Note

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

L'operatore di decremento prefisso (––) è analogo all'operatore di incremento prefisso, tranne per il fatto che all'operando viene applicato un decremento di uno e il risultato è il valore decrementato.

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. Nella forma prefissa, l'incremento o il decremento si verifica prima che il valore venga utilizzato 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.

Dal momento che gli operatori di incremento e decremento hanno effetti collaterali, l'utilizzo di espressioni con operatori di incremento o di incremento in una macro del preprocessore può produrre risultati indesiderati. Si consideri l'esempio seguente:

// 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.

Vedere anche

Riferimenti

Espressioni con operatori unari

Operatori C++

Operatori C++, precedenza e associazione

Concetti

Operatori di incremento e decremento in forma prefissa