附录

运算符优先级和结合方向

运算符优先级和结合方向

优先级运算符名称说明
1::作用域解析运算符说明
2a++后缀自增运算符说明
2a--后缀自减运算符说明
2T()函数风格转型运算符说明
2T{}列表风格转型运算符说明
2a()函数调用运算符说明
2a[]下标运算符说明
2.成员运算符说明
2->指针成员运算符说明
3 (从右往左)++a前缀自增运算符说明
3 (从右往左)--a前缀自减运算符说明
3 (从右往左)+a一元加运算符说明
3 (从右往左)-a一元减运算符说明
3 (从右往左)!逻辑非运算符说明
3 (从右往左)~取反运算符说明
3 (从右往左)(T)C 风格转型运算符说明
3 (从右往左)*a解地址运算符说明
3 (从右往左)&a取地址运算符说明
3 (从右往左)sizeofsizeof 运算符说明
3 (从右往左)co_awaitawait 运算符敬请期待
3 (从右往左)newnew 运算符说明
3 (从右往左)new T[]new 运算符说明
3 (从右往左)deletedelete 运算符说明
3 (从右往左)delete[]delete 运算符说明
4.*成员指针运算符说明
4->*指针成员指针运算符说明
5a*b乘法运算符说明
5/除法运算符说明
5%模运算符说明
6a+b加法运算符说明
6a-b减法运算符说明
7<<左移运算符说明
7>>右移运算符说明
8<=>三路比较运算符说明
9<小于运算符说明
9<=小于等于运算符说明
9>大于运算符说明
9>=大于等于运算符说明
10==等于运算符说明
10!=不等于运算符说明
11a&b逐位与运算符说明
12^逐位异或运算符说明
13|逐位或运算符说明
14&&逻辑与运算符说明
15||逻辑或运算符说明
16 (从右往左)a?b:c条件运算符说明
16 (从右往左)throwthrow 运算符敬请期待
16 (从右往左)co_yieldyield 运算符敬请期待
16 (从右往左)=简单赋值运算符说明
16 (从右往左)+=加法复合赋值运算符说明
16 (从右往左)-=减法复合赋值运算符说明
16 (从右往左)*=乘法复合赋值运算符说明
16 (从右往左)/=除法复合赋值运算符说明
16 (从右往左)%=模复合赋值运算符说明
16 (从右往左)<<=左移复合赋值运算符说明
16 (从右往左)>>=右移复合赋值运算符说明
16 (从右往左)&=逐位与复合赋值运算符说明
16 (从右往左)^=逐位异或复合赋值运算符说明
16 (从右往左)|=逐位或复合赋值运算符说明
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 运算符获取对象或类型的对齐要求

  1. 条件表达式的 ?: 之间如同视有小括号,不考虑优先级;
  2. sizeof 表达式的操作数不能是 C 风格转型;

C++ 标准中不指定运算符名、优先级或结合顺序。C++ 标准使用类 EBNF 文法描述对应语法标记的语义。

运算符优先级与运算顺序无关;除逗号、逻辑与、逻辑或、赋值以外的运算符的运算顺序大多是未指明的。