C++ 运算符优先级表(从高到低)

以下是 C++ 运算符的优先级列表,优先级高的运算符先计算。同一行的运算符具有相同的优先级,结合性决定了它们的计算顺序。

最高优先级

  1. 作用域解析 ::
    • 从左到右

成员访问、下标、函数调用

  1. 成员访问 .->
    • 从左到右
  2. 数组下标 []
    • 从左到右
  3. 函数调用 ()
    • 从左到右
  4. 后置递增/递减 ++``--
    • 从左到右
  5. 类型转换 type()``type{}
    • 从左到右
  6. const_cast, dynamic_cast, reinterpret_cast, static_cast
    • 从左到右

一元运算符

  1. 前置递增/递减 ++``--
    • 从右到左
  2. 一元加/减 +``-
    • 从右到左
  3. 逻辑非 !
    • 从右到左
  4. 按位取反 ~
    • 从右到左
  5. 取地址 &
    • 从右到左
  6. 解引用 *
    • 从右到左
  7. sizeof
    • 从右到左
  8. new, new[]
    • 从右到左
  9. delete, delete[]
    • 从右到左
  10. C风格类型转换 (type)
    • 从右到左

成员指针运算符

  1. 成员指针 .*``->*
    • 从左到右

乘法、除法、取模

  1. 乘法 *
    • 从左到右
  2. 除法 /
    • 从左到右
  3. 取模 %
    • 从左到右

加法、减法

  1. 加法 +
    • 从左到右
  2. 减法 -
    • 从左到右

移位运算符

  1. 左移 <<
    • 从左到右
  2. 右移 >>
    • 从左到右

关系运算符

  1. 小于 <
    • 从左到右
  2. 小于等于 <=
    • 从左到右
  3. 大于 >
    • 从左到右
  4. 大于等于 >=
    • 从左到右

相等性运算符

  1. 等于 ==
    • 从左到右
  2. 不等于 !=
    • 从左到右

位运算符

  1. 按位与 &
    • 从左到右
  2. 按位异或 ^
    • 从左到右
  3. 按位或 |
    • 从左到右

逻辑运算符

  1. 逻辑与 &&
    • 从左到右
  2. 逻辑或 ||
    • 从左到右

条件运算符

  1. 条件运算符 ?:
    • 从右到左

赋值运算符

  1. 赋值 =
    • 从右到左
  2. 复合赋值 +=``-=``*=``/=``%=``<<=``>>=``&=``^=``|=
    • 从右到左

逗号运算符

  1. 逗号 ,
    • 从左到右

注意事项

  • 当不确定优先级时,使用括号 ()明确运算顺序
  • 某些运算符在不同上下文中有不同含义(如 *可以是乘法或解引用)
  • 运算符重载不会改变运算符的优先级