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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de