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, precedência e associatividade C++