C++运算符
一、运算符优先级和结合性
运算符的优先级决定运算执行顺序(优先级高的先执行),结合性决定同优先级运算的执行方向(左结合 / 右结合)。核心优先级从高到低如下(仅列常用类别,同优先级按结合性执行):
| 优先级 | 运算符 | 描述 | 结合性 |
|---|---|---|---|
| 1 | :: |
作用域解析 | 从左向右 |
| 2 | () |
函数调用 | 从左向右 |
[] |
数组下标 | 从左向右 | |
. |
成员访问 | 从左向右 | |
-> |
指针成员访问 | 从左向右 | |
++ (后缀), -- (后缀) |
后缀递增/递减 | 从左向右 | |
| 3 | ++ (前缀), -- (前缀) |
前缀递增/递减 | 从右向左 |
+ (一元), - (一元) |
一元正/负号 | 从右向左 | |
! |
逻辑非 (NOT) | 从右向左 | |
~ |
位非 (NOT) | 从右向左 | |
& |
取地址 | 从右向左 | |
* |
解引用 | 从右向左 | |
new |
动态内存分配 | 从右向左 | |
delete |
动态内存释放 | 从右向左 | |
sizeof |
求大小 | 从右向左 | |
(type) |
类型转换(强制转换) | 从右向左 | |
| 4 | .*, ->* |
成员指针访问 | 从左向右 |
| 5 | *, /, % |
乘法,除法,取模 | 从左向右 |
| 6 | +, - |
加法,减法(二元) | 从左向右 |
| 7 | <<, >> |
左移,右移 | 从左向右 |
| 8 | <, <=, >, >= |
关系比较符 | 从左向右 |
| 9 | ==, != |
相等性比较符 | 从左向右 |
| 10 | & |
位 AND | 从左向右 |
| 11 | ^ |
位 XOR (异或) | 从左向右 |
| 12 | ` | ` | 位 OR (或) |
| 13 | && |
逻辑 AND | 从左向右 |
| 14 | ` | ` | |
| 15 | ?: |
三元条件运算符 | 从右向左 |
| 16 | =, +=, -=, *=, /=, %=, &=, ` |
=, ^=, <<=, >>=` |
赋值运算符及复合赋值运算符 |
| 17 | , |
逗号运算符 | 从左向右 |
二. i++与++i
++i(前置递增):先将i的值加 1,再返回加 1 后的新值。i++(后置递增):先返回i的当前原值,再将i的值加 1。int i = 5;
int a = ++i; // 先i+1(i=6),再返回6 → a=6,最终i=6
int j = 5;
int b = j++; // 先返回j的原值5(b=5),再j+1 → j=6,最终b=5
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 宇宙尽头的森林!