Partilhar via


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

Ordem de avaliação em uma expressão

A ordem na qual a expressão mostrada na figura acima é avaliada é determinada pela precedência e associatividade dos operadores:

  1. A multiplicação (*) tem a precedência mais alta nessa expressão; portanto, a subexpressão b * c é avaliada primeiro.

  2. A adição (+) tem a precedência mais alta a seguir, de modo que a é adicionado ao produto de b vezes c.

  3. 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

Ordem de avaliação de 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.

Consulte também

Referência

Semântica de expressões