一、运算符优先级和结合性

运算符的优先级决定运算执行顺序(优先级高的先执行),结合性决定同优先级运算的执行方向(左结合 / 右结合)。核心优先级从高到低如下(仅列常用类别,同优先级按结合性执行):

优先级 运算符 描述 结合性
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