运算符优先级和结合方向
结合方向 | 优先级 | 运算符 | 名称 | 说明 |
---|---|---|---|---|
从左向右 | 1 | :: | 作用域解析运算符 | 说明 |
2 | a++ | 后缀自增运算符 | 说明 | |
a-- | 后缀自减运算符 | 说明 | ||
T() | 函数风格转型运算符 | 说明 | ||
T{} | 列表风格转型运算符 | 说明 | ||
a() | 函数调用运算符 | 说明 | ||
a[] | 下标运算符 | 说明 | ||
. | 成员运算符 | 说明 | ||
-> | 指针成员运算符 | 说明 | ||
从右向左 | 3 | ++a | 前缀自增运算符 | 说明 |
++a | 前缀自减运算符 | 说明 | ||
+a | 一元加运算符 | 说明 | ||
-a | 一元减运算符 | 说明 | ||
! | 逻辑非运算符 | 说明 | ||
~ | 取反运算符 | 说明 | ||
(T) | C 风格转型运算符 | 说明 | ||
*a | 解地址运算符 | 说明 | ||
&a | 取地址运算符 | 说明 | ||
sizeof | sizeof 运算符 | 说明 | ||
co_await | await 运算符 | 敬请期待 | ||
new | new 运算符 | 说明 | ||
new T[] | new[] 运算符 | 说明 | ||
delete | delete 运算符 | 说明 | ||
delete[] | delete[] 运算符 | 说明 | ||
从左向右 | 4 | .* | 成员指针运算符 | 说明 |
->* | 指针成员指针运算符 | 说明 | ||
5 | a*b | 乘法运算符 | 说明 | |
/ | 除法运算符 | 说明 | ||
% | 模运算符 | 说明 | ||
6 | a+b | 加法运算符 | 说明 | |
a-b | 减法运算符 | 说明 | ||
7 | << | 左移运算符 | 说明 | |
>> | 右移运算符 | 说明 | ||
8 | <=> | 三路比较运算符 | 说明 | |
9 | < | 小于运算符 | 说明 | |
<= | 小于等于运算符 | 说明 | ||
> | 大于运算符 | 说明 | ||
>= | 大于等于运算符 | 说明 | ||
10 | == | 等于运算符 | 说明 | |
!= | 不等于运算符 | 说明 | ||
11 | a&b | 逐位与运算符 | 说明 | |
12 | ^ | 逐位异或运算符 | 说明 | |
13 | | | 逐位或运算符 | 说明 | |
14 | && | 逻辑与运算符 | 说明 | |
15 | || | 逻辑或运算符 | 说明 | |
从右向左 | 16 | a?b:c | 条件运算符 | 说明 |
throw | throw 运算符 | 敬请期待 | ||
co_yield | yield 运算符 | 敬请期待 | ||
= | 简单赋值运算符 | 说明 | ||
+= | 加法复合赋值运算符 | 说明 | ||
-= | 减法复合赋值运算符 | 说明 | ||
*= | 乘法复合赋值运算符 | 说明 | ||
/= | 出发复合赋值运算符 | 说明 | ||
%= | 模复合赋值运算符 | 说明 | ||
<<= | 左移复合赋值运算符 | 说明 | ||
>>= | 右移复合赋值运算符 | 说明 | ||
&= | 逐位与复合赋值运算符 | 说明 | ||
^= | 逐位异或复合赋值运算符 | 说明 | ||
|= | 逐位或复合赋值运算符 | 说明 | ||
从左向右 | 17 | , | 逗号运算符 | 说明 |
以下运算符的操作数均因被小括号括起而不存在歧义性,故不存在优先级或结合方向。 | ||||
const_cast<T>(a) | const_cast 运算符 | 说明 | ||
static_cast<T>(a) | static_cast 运算符 | 说明 | ||
dynamic_cast<T>(a) | dynamic_cast 运算符 | 说明 | ||
reinterpret_cast<T>(a) | reinterpret_cast 运算符 | 说明 | ||
typeid(a) | typeid 运算符 | 说明 | ||
sizeof...(a) | sizeof... 运算符 | 敬请期待 | ||
noexcept(a) | noexcept 运算符 | 敬请期待 | ||
alignof(a) | alignof 运算符 | 获取对象或类型的对其要求 |
注
- 条件表达式的
?
和:
之间如同视有小括号,不考虑优先级; - sizeof 表达式的操作数不能是 C 风格转型;
C++ 标准中不指定运算符名、优先级或结合顺序。C++ 标准使用类 EBNF 文法描述对应语法标记的语义。
运算符优先级与运算顺序无关;除逗号、逻辑与、逻辑或、赋值以外的运算符的运算顺序大多是未指明的。