计算顺序

本节讨论表达式的计算顺序,但不解释这些表达式中的运算符的语法或语义。 前面的章节为这些运算符各提供了一个完整的引用。

表达式根据其运算符的优先级和分组来计算。(词法约定中的运算符优先级和关联性显示了 C++ 运算符对表达式实施的关系。)请看以下示例:

示例

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

Output

38
38
54

表达式计算顺序

表达式中的计算顺序

上图中显示的表达式的计算顺序取决于运算符的优先级和关联性:

  1. 乘法 (*) 在此表达式中具有最高优先级;因此子表达式 b * c 首先计算。

  2. 加法 (+) 具有第二高的优先级,因此,a 将与 b 和 c 的乘积相加。

  3. 左移 (<<) 在此表达式中具有最低的优先级,但有两个匹配项。 由于左移运算符从左到右分组,因此先计算左子表达式,再计算右子表达式。

当使用括号为子表达式分组时,它们将更改表达式的计算优先级和顺序,如下图所示。

带括号的表达式计算顺序

带括号表达式的计算顺序

类似于上图的表达式的计算纯粹是为了展示副作用 - 在本例中是将信息转移到标准输出设备。

请参见

参考

表达式的语义