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