Compartilhar via


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

Sintaxe

++ unary-expression
-- unary-expression

Comentários

O operador de incremento pré-fixado (++) adiciona um ao operando; esse valor incrementado é o resultado da expressão. O operando precisa 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.

Visual Studio 2017 versão 15.3 e posterior (disponível no /std:c++17 modo e posterior): o operando de um operador de incremento ou decremento pode não ser do tipo bool.

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, confira Operadores de incremento e decremento pós-fixados.) 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.

Observação

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.

Confira também

Expressões com operadores unários
Operadores internos C++, precedência e associatividade
Operadores de incremento e decremento pré-fixados