运算符优先级表
| 结合律 | 运算符 | 功能 | 使用形式 |
|---|---|---|---|
| 左 | :: | 全局作用域 | ::name |
| 左 | :: | 类作用域 | class::name |
| 左 | :: | 命名空间作用域 | namespace::name |
| 左 | . | 成员选择 | object.name |
| 左 | -> | 成员选择 | pointer->member |
| 左 | [] | 下标 | expr[expr] |
| 左 | () | 函数调用 | name(expr_list) |
| 左 | () | 类型构造 | type(expr_list) |
| 右 | ++ | 后置递增运算符 | lvalue++ |
| 右 | -- | 后置递减运算符 | lvalue-- |
| 右 | typeid | 类型ID | typeid(type) |
| 右 | typeid | 运行时类型ID | typeid(expr) |
| 右 | explicit_cast | 类型转换 | cast_name |
| 右 | ++ | 前置递增运算符 | ++lvalue |
| 右 | -- | 前置递减运算符 | --lvalue |
| 右 | ~ | 位求反 | ~expr |
| 右 | ! | 逻辑非 | !expr |
| 右 | - | 一元负号 | -expr |
| 右 | + | 一元正号 | +expr |
| 右 | * | 解引用 | *expr |
| 右 | & | 取地址 | &lvalue |
| 右 | () | 类型转换 | (type)expr |
| 右 | sizeof | 对象的大小 | sizeof expr |
| 右 | sizeof | 类型的大小 | sizeof(type) |
| 右 | sizeof... | 参数包的大小 | sizeof ...(name) |
| 右 | new | 创建对象 | new type |
| 右 | new [] | 创建数组 | new type[size] |
| 右 | delete | 释放对象 | delete expr |
| 右 | delete[] | 释放数组 | delete [] expr |
| 右 | nonxcept | 能否抛出异常 | noexcept(expr) |
| 左 | ->* | 指向成员选择的指针 | ptr->*ptr_to_member |
| 左 | .* | 指向成员选择的指针 | obj.*ptr_to_member |
| 左 | * | 乘法 | expr*expr |
| 左 | / | 除法 | expr /expr |
| 左 | % | 取余 | expr%expr |
| 左 | + | 加法 | expr+expr |
| 左 | - | 减法 | expr-expr |
| 左 | << | 向左移位 | expr<<expr |
| 左 | >> | 向右移位 | expr>>expr |
| 左 | < | 小于 | expr<expr |
| 左 | <= | 小于等于 | expr<=expr |
| 左 | > | 大于 | expr>expr |
| 左 | >= | 大于等于 | expr>=expr |
| 左 | == | 相等 | expr==expr |
| 左 | != | 不相等 | expr!=expr |
| 左 | & | 位与 | expr&expr |
| 左 | ^ | 位异或 | expr^expr |
| 左 | | | 位或 | expr|expr |
| 左 | && | 逻辑与 | expr&&expr |
| 左 | || | 逻辑或 | expr||expr |
| 右 | ?: | 条件 | expr?expr:expr |
| 右 | = | 赋值 | lvalue = expr |
| 右 | *=,/=,%= | 复合赋值 | |
| 右 | +=,-= | 复合赋值 | |
| 右 | <<=,>>= | 复合赋值 | |
| 右 | &=,|=,^= | 复合赋值 | |
| 右 | throw | 抛出异常 | throw expr |
| 左 | , | 逗号 | expr,expr |