C++ 语言包括所有 C 运算符并添加多个新的运算符。 运算符指定对一个或多个操作数执行的计算。
优先级和结合性
运算符优先级指定了包含多个运算符的表达式中的运算顺序。 运算符关联性指定了在包含多个具有相同优先级的运算符的表达式中,操作数是与其左侧还是右侧的操作数组合。
替代拼写
C++ 为某些运算符指定了替代拼写。 在 C 中,替代拼写在 <iso646.h> 标头中作为宏提供。 在 C++ 中,这些替代项是关键字,<iso646.h> 或 C++ 等效的 <ciso646> 已弃用。 在 Microsoft C++ 中,需要 /permissive- 或 /Za 编译器选项才能启用替代拼写。
C++ 运算符的优先级和关联性表
下表显示 C++ 运算符的优先级和关联性(从最高优先级到最低优先级)。 优先级别编号相同的运算符具有等同的优先级别,除非由括号显式施加另一种关系。
| 运算符说明 | 运算符 | 替代项 |
|---|---|---|
| 第 1 组优先级,无关联性 | ||
| 范围解析 | :: |
|
| 第 2 组优先级,从左到右关联 | ||
| 成员选择(对象或指针) |
. 或 -> |
|
| 数组下标 | [] |
|
| 函数调用 | () |
|
| 后缀递增 | ++ |
|
| 后缀递减 | -- |
|
| 类型名称 | typeid |
|
| 常量类型转换 | const_cast |
|
| 动态类型转换 | dynamic_cast |
|
| 重新解释的类型转换 | reinterpret_cast |
|
| 静态类型转换 | static_cast |
|
| 第 3 组优先级,从右到左关联 | ||
| 对象或类型的大小 | sizeof |
|
| 前缀递增 | ++ |
|
| 前缀递减 | -- |
|
| 二进制反码 | ~ |
compl |
| 逻辑“非” | ! |
not |
| 一元求反 | - |
|
| 一元加 | + |
|
| Address-of | & |
|
| 间接寻址 | * |
|
| 创建对象 | new |
|
| 销毁对象 | delete |
|
| 强制转换 | () |
|
| 第 4 组优先级,从左到右关联 | ||
| 指向成员的指针(对象或指针) |
.* 或 ->* |
|
| 第 5 组优先级,从左到右关联 | ||
| 乘法 | * |
|
| 除法 | / |
|
| 取模 | % |
|
| 第 6 组优先级,从左到右关联 | ||
| 加法 | + |
|
| 减法 | - |
|
| 第 7 组优先级,从左到右关联 | ||
| 左移 | << |
|
| 右移 | >> |
|
| 第 8 组优先级,从左到右关联 | ||
| 小于 | < |
|
| 大于 | > |
|
| 小于或等于 | <= |
|
| 大于或等于 | >= |
|
| 第 9 组优先级,从左到右关联 | ||
| 等式 | == |
|
| 不相等 | != |
not_eq |
| 第 10 组优先级,从左到右关联 | ||
| 按位“与” | & |
bitand |
| 第 11 组优先级,从左到右关联 | ||
| 按位“异或” | ^ |
xor |
| 第 12 组优先级,从左到右关联 | ||
| 按位“与或” | | |
bitor |
| 第 13 组优先级,从左到右关联 | ||
| 逻辑与 | && |
and |
| 第 14 组优先级,从左到右关联 | ||
| 逻辑或 | || |
or |
| 第 15 组优先级,从右到左关联 | ||
| 条件 | ? : |
|
| 转让 | = |
|
| 乘法赋值 | *= |
|
| 除法赋值 | /= |
|
| 取模赋值 | %= |
|
| 加法赋值 | += |
|
| 减法赋值 | -= |
|
| 左移赋值 | <<= |
|
| 右移赋值 | >>= |
|
| 按位“与”赋值 | &= |
and_eq |
| 按位“与或”赋值 | |= |
or_eq |
| 按位“异或”赋值 | ^= |
xor_eq |
| 引发表达式 | throw |
|
| 第 16 组优先级,从左到右关联 | ||
| Comma | " |