Поделиться через


Порядок вычислений

В этом разделе рассматривается порядок оценки выражений, однако не поясняется синтаксис или семантика операторов в этих выражениях. Более ранние разделы содержат полные справочные сведения по каждому из этих операторов.

Выражения оцениваются по приоритетности и группировке операторов. (раздел Приоритет и ассоциативность операторов в статьеЛексические правила показывает, какие связи операторы С++ налагают на выражения). Рассмотрим следующий пример.

Пример

// 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";
}

Вывод

38
38
54

Порядок вычисления выражений

Порядок вычисления в выражении

Порядок, в котором оценивается выражение, показанное на рисунке выше, определяется приоритетностью и ассоциативностью операторов.

  1. Умножение (*) имеет наибольший приоритет в этом выражении; следовательно, выражение b * c оценивается первым.

  2. Сложение (+) имеет следующий наибольший приоритет, поэтому a добавляется к произведению b и c.

  3. Левый перенос (<<) имеет самый низкий приоритет в выражении, однако существует два вхождения. Поскольку оператор левого переноса группирует выражение слева направо, левое вложенное выражение оценивается первым, а затем — правое.

Если для группировки вложенных выражений используются скобки, они меняют приоритет и порядок оценки выражения, как показано на следующем рисунке.

Порядок вычисления выражений со скобками

Порядок вычисления выражения со скобками

Выражения, такие как на рисунке выше, оцениваются исключительно для побочного эффекта, в данном случае — для переноса информации на стандартное устройство вывода.

См. также

Ссылки

Семантика выражений