附录D 运算符优先级
本章概述
本附录提供C++运算符优先级表,从最高到最低排列,以及常见运算符的使用示例。
运算符优先级表
优先级从高到低:
| 优先级 | 运算符 | 结合性 | 说明 |
|---|---|---|---|
| 1 | :: | 左到右 | 作用域解析 |
| 2 | () () [] -> . | 左到右 | 括号、成员访问 |
| 2 | ++ -- | 右到左 | 后缀递增/递减 |
| 3 | ++ -- + - ! ~ | 右到左 | 前缀一元运算符 |
| 3 | * & new delete | 右到左 | 解引用、取址、内存管理 |
| 3 | sizeof typeid alignof | 右到左 | 大小、类型、对齐 |
| 3 | (type) static_cast等 | 右到左 | 类型转换 |
| 4 | .* ->* | 左到右 | 成员指针 |
| 5 | * / % | 左到右 | 乘、除、取模 |
| 6 | + - | 左到右 | 加、减 |
| 7 | << >> | 左到右 | 移位 |
| 8 | < <= > >= | 左到右 | 关系比较 |
| 9 | == != | 左到右 | 相等比较 |
| 10 | & | 左到右 | 按位与 |
| 11 | ^ | 左到右 | 按位异或 |
| 12 | | | 左到右 | 按位或 |
| 13 | && | 左到右 | 逻辑与 |
| 14 | || | 左到右 | 逻辑或 |
| 15 | ?: | 右到左 | 条件运算符 |
| 15 | = += -=等 | 右到左 | 赋值运算符 |
| 16 | throw | 左到右 | 抛出异常 |
| 17 | , | 左到右 | 逗号运算符 |
常见运算符示例
算术运算符
cpp
int a = 10, b = 3;
a + b // 13(加法)
a - b // 7(减法)
a * b // 30(乘法)
a / b // 3(整数除法)
a % b // 1(取模)关系运算符
cpp
int a = 10, b = 20;
a < b // true(小于)
a > b // false(大于)
a <= b // true(小于等于)
a >= b // false(大于等于)
a == b // false(等于)
a != b // true(不等于)逻辑运算符
cpp
bool a = true, b = false;
a && b // false(逻辑与)
a || b // true(逻辑或)
!a // false(逻辑非)位运算符
cpp
int a = 0b1010, b = 0b1100;
a & b // 0b1000(按位与)
a | b // 0b1110(按位或)
a ^ b // 0b0110(按位异或)
~a // 按位取反
a << 1 // 0b10100(左移)
a >> 1 // 0b0101(右移)优先级记忆技巧
- 括号最优先:
()[]->. - 一元运算符次之:
!++--*&sizeof - 算术运算符:先乘除后加减
- 关系运算符:
<>==!= - 逻辑运算符:
&&先于|| - 赋值运算符:最后执行