C++ 运算符优先级和结合性

下表列出了 C++ 运算符的优先级和结合性。运算符从上到下按优先级降序排列。abc 是操作数。

优先级 运算符 描述 结合性
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 逗号 从左到右 →

参考自: