C++ 运算符优先级和结合性
下表列出了 C++ 运算符的优先级和结合性。运算符从上到下按优先级降序排列。a、b 和 c 是操作数。
| 优先级 | 运算符 | 描述 | 结合性 |
|---|---|---|---|
| 1 | a::b |
作用域解析 | 从左到右 → |
| 2 | a++ a-- |
后缀/后置 增量和减量 | 从左到右 → |
type(a) type{a} |
函数式转换 | ||
a() |
函数调用 | ||
a[] |
下标 | ||
a.b a->b |
成员访问 | ||
| 3 | ++a --a |
前缀 增量和减量 | 从右到左 ← |
+a -a |
一元 加号和减号 | ||
!a ~a |
逻辑非 和 按位非 | ||
(type)a |
C 风格转换 | ||
*a |
间接寻址(解引用) | ||
&a |
取地址 | ||
sizeof |
sizeof | ||
co_await |
await-表达式(C++20) | ||
new new[] |
动态内存分配 | ||
delete delete[] |
动态内存释放 | ||
| 4 | a.*b a->*b |
指向成员的指针 | 从左到右 → |
| 5 | a * b a / b a % b |
乘法、除法和取模 | 从左到右 → |
| 6 | a + b a - b |
加法和减法 | 从左到右 → |
| 7 | a << b a >> b |
按位 左移和右移 | 从左到右 → |
| 8 | a <=> b |
三路比较运算符(C++20 起) | 从左到右 → |
| 9 | a < b a <= b a > b a >=b |
关系运算符 <、<=、> 和 >= |
从左到右 → |
| 10 | a == b a != b |
相等运算符 == 和 != |
从左到右 → |
| 11 | a & b |
按位与 | 从左到右 → |
| 12 | a ^ b |
按位异或(异或) | 从左到右 → |
| 13 | a | b |
按位或(包含或) | 从左到右 → |
| 14 | a && b |
逻辑与 | 从左到右 → |
| 15 | a || b |
逻辑或 | 从左到右 → |
| 16 | a ? b : c |
三元条件 | 从右到左 ← |
throw |
throw 运算符 | ||
co_yield |
yield-表达式(C++20) | ||
a = b |
直接赋值(C++ 类默认提供) | ||
a += b a -= b |
通过加法和减法进行的复合赋值 | ||
a *= b a /= b a %= b |
通过乘法、除法和取模进行的复合赋值 | ||
a <<= b a >>= b |
通过按位左移和右移进行的复合赋值 | ||
a &= b a ^= b a |= b |
通过按位与、异或和或进行的复合赋值 | ||
| 17 | a, b |
逗号 | 从左到右 → |
参考自: