Ordem de avaliação
Esta seção discute a ordem em que as expressões são avaliadas, mas não explica a sintaxe nem a semântica dos operadores nessas expressões. As seções anteriores fornecem uma referência completa para cada um desses operadores.
As expressões são avaliadas de acordo com a precedência e o agrupamento dos respectivos operadores. (O tópico sobre precedência e associatividade de operadores, em Convenções léxicas, mostra as relações que os operadores do C++ impõem às expressões.) Considere este exemplo:
Exemplo
// expre_pluslang__pluslang_Order_of_Evaluation.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int a = 2, b = 4, c = 9;
cout << a + b * c << "\n";
cout << a + (b * c) << "\n";
cout << (a + b) * c << "\n";
}
Saída
38
38
54
Ordem de avaliação da expressão
A ordem na qual a expressão mostrada na figura acima é avaliada é determinada pela precedência e associatividade dos operadores:
A multiplicação (*) tem a precedência mais alta nessa expressão; portanto, a subexpressão b * c é avaliada primeiro.
A adição (+) tem a precedência mais alta a seguir, de modo que a é adicionado ao produto de b vezes c.
O deslocamento para a esquerda (<<) tem a precedência mais baixa na expressão, mas há duas ocorrências. Como o operador de deslocamento para a esquerda é agrupado da esquerda para a direita, a subexpressão à esquerda é avaliada primeiro, seguida pela subexpressão à direita.
Quando são usados parênteses para agrupar as subexpressões, eles alteram a precedência e também a ordem em que a expressão é avaliada, conforme mostra a figura a seguir.
Ordem de avaliação da expressão com parênteses
Expressões como as da figura acima são avaliadas apenas por seus efeitos colaterais — nesse caso, para transferir informações para o dispositivo de saída padrão.