运算符优先级
运算符从上到下列出,优先级递减。具有相同编号的运算符具有相同的优先级和相同的关联性。
::
- 后缀运算符:
[]
()
T(...)
.
->
++
--
dynamic_cast
static_cast
reinterpret_cast
const_cast
typeid
- 一元前缀运算符:
++
--
*
&
+
-
!
~
sizeof
new
delete
delete[]
; C 风格的转换表,(T)...
; (C++ 11 及以上)sizeof...
alignof
noexcept
.*
和->*
*
,/
和%
,二进制算术运算符+
和-
,二进制算术运算符<<
和>>
<
,>
,<=
,>=
==
和!=
&
,按位 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)
。