比較運算子
你可以過載所有比較運算子:
==
和!=
>
和<
>=
和<=
過載所有運算子的推薦方法是僅實現 2 個運算子(==
和 <
),然後使用它們來定義其餘運算子。向下滾動以獲得解釋
在 class
/ struct
之外超載:
//Only implement those 2
bool operator==(const T& lhs, const T& rhs) { /* Compare */ }
bool operator<(const T& lhs, const T& rhs) { /* Compare */ }
//Now you can define the rest
bool operator!=(const T& lhs, const T& rhs) { return !(lhs == rhs); }
bool operator>(const T& lhs, const T& rhs) { return rhs < lhs; }
bool operator<=(const T& lhs, const T& rhs) { return !(lhs > rhs); }
bool operator>=(const T& lhs, const T& rhs) { return !(lhs < rhs); }
class
/ struct
內部超載:
//Note that the functions are const, because if they are not const, you wouldn't be able
//to call them if the object is const
//Only implement those 2
bool operator==(const T& rhs) const { /* Compare */ }
bool operator<(const T& rhs) const { /* Compare */ }
//Now you can define the rest
bool operator!=(const T& rhs) const { return !(*this == rhs); }
bool operator>(const T& rhs) const { return rhs < *this; }
bool operator<=(const T& rhs) const { return !(*this > rhs); }
bool operator>=(const T& rhs) const { return !(*this < rhs); }
運算子顯然返回了一個 bool
,表示 true
或 false
用於相應的操作。
所有的運算子都是通過 const&
來獲取它們的引數,因為運算子唯一能做的就是比較,所以它們不應該修改物件。通過 &
(參考)傳遞比按值快,並且為了確保操作符不修改它,它是一個參考。
請注意,class
/ struct
中的運算子定義為 const
,其原因是如果沒有函式 const
,則無法比較 const
物件,因為編譯器不知道運算子不會修改任何內容。