評估的順序
本節討論評估運算式的順序,但不會說明這些運算式的語法或運算子的語意。 先前章節中已為這些運算子提供完整參考。
運算式會根據其運算子的優先順序和群組進行評估。(語彙慣例中的運算子的優先順序和關聯性顯示了對運算式加入 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
運算式-評估順序
上圖中顯示運算式評估的順序可用來判斷運算子的優先順序和關聯性:
在此運算式中,乘法 (*) 具有最高優先順序,因此會先評估子運算式 b * c。
下一個最高優先順序的項目是加法 (+),因此會將 a 與 b 和 c 的乘積相加。
左移 (<<) 在運算式中的優先順序最低,但它出現在兩個地方。 由於左移運算子是由左至右來分組,因此會先評估左方的子運算式,再評估右邊的子運算式。
在子運算式的群組中使用括號時,會改變優先順序以及運算式的評估順序,如下圖所示。
具備括號的運算式-評估順序
運算式 (如上圖) 會單純地評估其副作用,在此例中,會將資訊傳送到標準輸出裝置。