C++ 运算符优先级和关联性
在本教程中,我们将借助示例了解 C++ 中运算符的优先级和关联性。
C++ 运算符优先级
如果单个表达式中有多个运算符,C++ 不会同时计算这些运算。相反,C++ 会首先评估那些优先级优先级较高的运算符的其操作。
让我们看一个例子:
int x = 5 - 17 * 6;
在这里,乘法运算符 *
的优先级高于减法运算符 -
。因此,首先运算 17 * 6
。
于是,上面的表达式等价于
int x = 5 - (17 * 6);
如果我们希望首先评估 5 - 17
,那么我们必须将它们括在括号中:
int x = (5 - 17) * 6;
示例 1:运算符优先级
#include <iostream>
using namespace std;
int main() {
// 首先运算 17 * 6
int num1 = 5 - 17 * 6;
// 等同于 num1
int num2 = 5 - (17 * 6);
// 首先运算 5 - 17
int num3 = (5 - 17) * 6;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
cout << "num3 = " << num3 << endl;
return 0;
}
输出
num1 = -97
num2 = -97
num3 = -72
注意: 由于 C++ 中有很多运算符具有多级优先级,因此强烈建议我们使用括号使我们的代码更具可读性。
C++ 运算符优先级表
下表(取自cppreference.com)显示了 C++ 运算符的优先级。优先级 1 表示最高优先级的运算符,而优先级 17 表示最低优先级的运算符。
C++ 运算符关联性
运算符关联性是计算表达式的方向。例如,
int a = 1;
int b = 4;
a = b;
看看 a = 4;
声明。运算符 =
的结合性是从右到左。因此, b
的值被分配到 a
,而不是另一个方向。
此外,多个运算符具有相同的优先级(从上表中可以看出)。当在一个表达式中使用多个具有相同优先级的运算符时,将根据它们的关联性对它们进行评估。
int a = 1;
int b = 4;
b += a -= 6;
运算符 +=
和 -=
具有相同的优先级。由于这些运算符的关联性是从右到左的,因此最后一条语句的评估方式如下:
- 首先,
a -= 6
被评估。因此,a
将是-5
- 然后,
b += -5
被评估。因此,b
将是-1
示例 2:运算符关联性
#include <iostream>
using namespace std;
int main() {
int a = 1;
int b = 4;
b += a -= 6;
cout << "a = " << a << endl; ;
cout << "b = " << b;
}
输出
a = -5
b = -1