運算子優先順序
運算子從上到下列出,優先順序遞減。具有相同編號的運算子具有相同的優先順序和相同的關聯性。
::- 字尾運算子:
[]()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)。