优先级顺序由上至下
算术运算符优先级:一元运算符的优先级最高(+val),接下来是乘法和除法,优先级最低的是加法和减法。
结合律和运算符 功能 用法
左 :: 全局作用域 ;;name
左 :: 类作用域 class::name
左 :: 命名空间作用域 namespace::name
左 . 成员选择object.member
左 -> 成员选择pointer->member
左 [ ] 下标 expt[expr]
左 () 函数调用 name(expr_list)
左 () 类型构造 type(expr_list)
右 ++ 后置递增运算 lvalue++
右 -- 后置递减运算 lvalue--
右 typeid 类型ID typeid(type)
右 typeid 运行时类型ID typeid(expr)
右 explicit cast类型转换 cast_name<type>(expr)
右 ++ 前置递增运算 ++lvalue
右 -- 前置递减运算 --lvalue
右 - 位求反 -expr
右 ! 逻辑非 !expr
右 - 一元负号 -expr
右 + 一元正号 +expr
右 * 解引用 *expr
右 & 取地址 &expr
右 () 类型转换 (type)expr
右 sizeof 对象的大小 sizeof expr
右 sizeof 类型的大小 sizeof(type)
右 sizeof 参数包的大小 sizeof...(name)
右 new 创建对象 new type
右 new[ ] 创建数组 new type[ ]
右 delete 释放对象 delete expr
右 delete[ ] 释放数组 delete [ ] expr
右 noexcept 能否抛出异常 noexcept(expr)
左 ->* 指向成员选择的指针 ptr->*ptr_to_member
左 .* 指向成员选择的指针 obj.*ptr_to_member
左 * 乘法 expr *expr
左 / 除法 expr/expr
左 % 取模 expr%expr
左 + 加法 expr+expr
左 - 减法 expr-expr
左 << 向左移位 expr<<expr
左 >> 向右移位 expr>>expr
左 < 小于 expr<expr
左 <= 小于等于 expr<=expr
左 > 大于 expr>expr
左 >= 大于等于 expr>=expr
左 == 相等 expr==expr
左 != 不等于 expr!=expr
左 & 位与 expr&expr
左 ^ 位异或 expr^expr
左 | 位或 expr|expr
左 && 逻辑与 expr&&expr
左 || 逻辑或 expr||expr
右 ?: 条件 expr?expr:expr
右 = 赋值 lvalue = expr
右 *=,/=,%=复合赋值 lvalue += expr等
右 +=,-=
右 <<=,>>=
右 &=, |=,^=
右 throw 抛出异常throw expr
左 , 逗号 expr, expr