Partilhar via


Operadores de incremento e de decremento pré-fixados: ++ e --

++ unary-expression –– unary-expression

Comentários

O operador de incremento de prefixo (++) adiciona um ao operando; esse valor incrementado é o resultado da expressão. O operando deve ser um valor l, não do tipo const. O resultado é um valor l do mesmo tipo do operando.

O operador de decremento de prefixo (––) é análogo ao operador de incremento de prefixo, exceto pelo fato de que o operando é decrementado por um e o resultado é esse valor decrementado.

Os operadores de incremento e decremento de prefixo e sufixo afetam seus operandos. A principal diferença entre eles é a ordem em que o incremento ou decremento ocorre na avaliação de uma expressão. (Para obter mais informações, consulte Operadores de incremento e decremento de sufixo.) Na forma de prefixo, o incremento ou decremento ocorre antes de o valor ser usado na avaliação da expressão, assim o valor da expressão é diferente do valor do operando. Na forma de sufixo, o incremento ou decremento ocorre após que o valor é usado na avaliação da expressão, assim o valor da expressão é igual ao valor do operando. Por exemplo, o programa seguir imprime "++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;
}

Um operando tipo integral ou flutuante é incrementado ou decrementado pelo valor inteiro 1. O tipo do resultado é igual ao tipo do operando. Um operando do tipo ponteiro é incrementado ou decrementado pelo tamanho do objeto pertinente. Um ponteiro incrementado aponta para o próximo objeto;um ponteiro decrementado aponta para o objeto anterior.

Como os operadores de incremento e decremento têm efeitos colaterais, usar expressões com os operadores de incremento ou decremento em uma macro de pré-processador pode ter resultados indesejados. Considere este exemplo:

// 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 );
}

A macro se expande para:

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

Se i for maior ou igual a j ou menor que j por 1, será incrementado duas vezes.

Dica

As funções embutidas C++ são preferíveis para macros em muitos casos, pois eliminam efeitos colaterais como os descritas aqui, e permitem que a linguagem faça uma verificação de tipo mais completa.

Consulte também

Referência

Expressões com operadores unários

Operadores C++

Operadores, precedência e associatividade C++

Conceitos

Operadores de incremento e de decremento pré-fixados