Порядок вычислений
В этом разделе рассматривается порядок оценки выражений, однако не поясняется синтаксис или семантика операторов в этих выражениях. Более ранние разделы содержат полные справочные сведения по каждому из этих операторов.
Выражения оцениваются по приоритетности и группировке операторов. (раздел Приоритет и ассоциативность операторов в статьеЛексические правила показывает, какие связи операторы С++ налагают на выражения). Рассмотрим следующий пример.
Пример
// 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
Порядок вычисления выражений
Порядок, в котором оценивается выражение, показанное на рисунке выше, определяется приоритетностью и ассоциативностью операторов.
Умножение (*) имеет наибольший приоритет в этом выражении; следовательно, выражение b * c оценивается первым.
Сложение (+) имеет следующий наибольший приоритет, поэтому a добавляется к произведению b и c.
Левый перенос (<<) имеет самый низкий приоритет в выражении, однако существует два вхождения. Поскольку оператор левого переноса группирует выражение слева направо, левое вложенное выражение оценивается первым, а затем — правое.
Если для группировки вложенных выражений используются скобки, они меняют приоритет и порядок оценки выражения, как показано на следующем рисунке.
Порядок вычисления выражений со скобками
Выражения, такие как на рисунке выше, оцениваются исключительно для побочного эффекта, в данном случае — для переноса информации на стандартное устройство вывода.