運算子優先順序

運算子從上到下列出,優先順序遞減。具有相同編號的運算子具有相同的優先順序和相同的關聯性。

  1. ::
  2. 字尾運算子:[] () T(...) . -> ++ -- dynamic_cast static_cast reinterpret_cast const_cast typeid
  3. 一元字首運算子:++ -- * & + - ! ~ sizeof new delete delete[]; C 風格的轉換表,(T)...; (C++ 11 及以上)sizeof... alignof noexcept
  4. .*->*
  5. */%,二進位制算術運算子
  6. +-,二進位制算術運算子
  7. <<>>
  8. <><=>=
  9. ==!=
  10. &,按位 AND 運算子
  11. ^
  12. |
  13. &&
  14. ||
  15. ?:(三元條件運算子)
  16. =*=/=%=+=-=>>=<<=&=^=|=
  17. throw
  18. ,(逗號運算子)

賦值,複合賦值和三元條件運算子是右關聯的。所有其他二元運算子都是左關聯的。

三元條件運算子的規則比簡單優先規則可以表達的要複雜一些。

  • 運算元與其左側的 ? 或右側的:的繫結程度低於其他任何運算子。實際上,條件運算子的第二個運算元被解析為好像是括號。這允許諸如 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)