运算符优先级和结合方向
| 结合方向 | 优先级 | 运算符 | 名称 | 说明 | 
|---|---|---|---|---|
| 从左向右 | 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 文法描述对应语法标记的语义。
运算符优先级与运算顺序无关;除逗号、逻辑与、逻辑或、赋值以外的运算符的运算顺序大多是未指明的。