運算子過載

無法更改內建型別的運算子,只能為使用者定義的型別過載運算子。也就是說,至少一個運算元必須是使用者定義的型別。

以下運算子不能過載:

  • 成員訪問或運算子 .
  • 指向成員訪問運算子 .*的指標
  • 範圍解析運算子::
  • 三元條件運算子 ?:
  • dynamic_caststatic_castreinterpret_castconst_casttypeidsizeofalignof,和 noexcept
  • 預處理指令 ###,它們在任何型別資訊可用之前執行。

有些運算子應該 (99.98%的情況下)超載:

  • &&||(相反,更喜歡使用隱式轉換為 bool
  • ,
  • 運算子地址(一元 &

為什麼?因為它們使另一個程式設計師可能永遠不會想到的運算子超載,導致行為與預期不同。

例如,使用者定義的這些運算子的 &&||過載會丟失其短路評估失去其特殊的排序屬性(C++ 17) ,排序問題也適用於 , 運算子過載。