C++运算符优先级一览表
时间: 2024-10-19 12:45:51
(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)
C++ 运算符的优先级决定了在没有括号的情况下,复合表达式中运算的先后顺序。下面是 C++ 中运算符的优先级一览表,按优先级从高到低排列:
C++ 运算符优先级表
优先级 | 运算符 | 描述 |
---|---|---|
1 | () | 函数调用 |
1 | [] | 数组下标 |
1 | . | 成员访问 |
1 | -> | 指针成员访问 |
1 | ++ (前缀) | 前缀自增 |
1 | -- (前缀) | 前缀自减 |
2 | ++ (后缀) | 后缀自增 |
2 | -- (后缀) | 后缀自减 |
2 | + | 一元加(正号) |
2 | - | 一元减(负号) |
2 | ! | 逻辑非 |
2 | ~ | 按位非 |
3 | 乘方(C++20新特性) | |
4 | * | 乘法 |
4 | / | 除法 |
4 | % | 取模 |
5 | + | 加法 |
5 | - | 减法 |
6 | << | 左移 |
6 | >> | 右移 |
7 | < | 小于 |
7 | <= | 小于或等于 |
7 | > | 大于 |
7 | >= | 大于或等于 |
8 | == | 等于 |
8 | != | 不等于 |
9 | & | 按位与 |
10 | ^ | 按位异或 |
11 | </td> | |
12 | && | 逻辑与 |
13 | </td> | |
14 | ? : | 条件运算符(三元运算符) |
15 | = | 赋值 |
15 | += | 加赋值 |
15 | -= | 减赋值 |
15 | *= | 乘赋值 |
15 | /= | 除赋值 |
15 | %= | 取模赋值 |
15 | <<= | 左移赋值 |
15 | >>= | 右移赋值 |
15 | &= | 按位与赋值 |
15 | ^= | 按位异或赋值 |
15 | =
| |
16 | , | 逗号运算符(逗号表达式) |
备注
1. 相同优先级的运算符:如果运算符优先级相同,则由运算符的结合性决定运算的顺序。
- 左结合性:从左到右计算,如大多数算术运算符(+,
-,
*,
/)。
- 右结合性:从右到左计算,如赋值运算符(=,
+=,
-=)。
2. 使用括号:为了提高代码的可读性及明确运算顺序,建议在复杂的表达式中使用括号。括号的优先级最高。
3. C++ 语言标准**:以上优先级和结合性是基于 C++ 的语言标准。对于某些运算符(如 ?:` 条件运算符),其适用性会更依赖于上下文。
示例代码
以下是一个使用不同运算符的示例,展示了优先级的影响:
cpp#include <iostream>
int main() {
int a = 5, b = 3, c = 2;
int result = a + b * c; // 结果为 11,因为 * 的优先级高于 +
std::cout << "a + b * c = " << result << std::endl;
result = (a + b) * c; // 结果为 16,因为括号改变了计算顺序
std::cout << "(a + b) * c = " << result << std::endl;
result = a - b < c; // 结果为 false 因为先计算 a - b 然后结果再与 c 比较
std::cout << "a - b < c = " << result << std::endl;
return 0;
}
总结
运算符优先级是理解 C++ 中表达式计算的重要部分。熟悉运算符的优先级可以帮助开发者编写正确且高效的代码。使用括号可以明确表达意图,从而避免潜在的错误和混淆。