运算符优先级
运算符从上到下列出,优先级递减。具有相同编号的运算符具有相同的优先级和相同的关联性。
::- 后缀运算符:
[]()T(...).->++--dynamic_caststatic_castreinterpret_castconst_casttypeid - 一元前缀运算符:
++--*&+-!~sizeofnewdeletedelete[]; C 风格的转换表,(T)...; (C++ 11 及以上)sizeof...alignofnoexcept .*和->**,/和%,二进制算术运算符+和-,二进制算术运算符<<和>><,>,<=,>===和!=&,按位 AND 运算符^|&&||?:(三元条件运算符)=,*=,/=,%=,+=,-=,>>=,<<=,&=,^=,|=throw,(逗号运算符)
赋值,复合赋值和三元条件运算符是右关联的。所有其他二元运算符都是左关联的。
三元条件运算符的规则比简单优先规则可以表达的要复杂一些。
- 操作数与其左侧的
?或右侧的:的绑定程度低于其他任何运算符。实际上,条件运算符的第二个操作数被解析为好像是括号。这允许诸如a ? b , c : d的表达在语法上有效。 - 操作数与其右侧的
?绑定比左侧的赋值运算符或throw更紧密,因此a = b ? c : d相当于a = (b ? c : d),throw a ? b : c相当于throw (a ? b : c)。 - 操作数在其右侧比赋值操作符更紧密地绑定到左侧的
:,因此a ? b : c = d相当于a ? b : (c = d)。