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