2017-03-16 84 views
0

如果編程語言允許,我應該總是重載操作符,還是創建成員函數更好?成員函數vs操作符重載

例如: bool operator ==(...) {...}bool equals(...){...}

+1

沒有「永遠」但是,如果過載操作符足夠直觀,那麼可以回答,但通常認爲這是一個很好的過載 – user

回答

3

如果操作者直接映射到功能的含義,然後將其建議使用操作者,例如

  • ==代替equals,因爲它比較平等,
  • +代替add如果它加入例如數學向量,
  • 但不是+而不是add,如果它是例如。附加到列表中。
1

我只會這樣做,如果它是絕對清楚它做了什麼。閱讀代碼更好避免超載。因爲你的大腦習慣於閱讀單詞而不是一些操作員。有時候操作員可以做出與猜測不同的事情。但我認爲==已經足夠清楚了。

如果在某些庫中將它們用作回調函數,則運算符很適用。例如std::sort。您可以定義將使用的operator <,它將定義如何對對象進行排序。

2

,正如除其他答案:

非成員operator ==成員operator ==或某種之間的主要區別等於方法,它在我腦海中,是比較類/結構對象時使用隱式轉換的機會。

所以,如果你有一些結構X

struct X { 
    X() = default; 
    X(int) {} 
}; 

您可以定義一個非成員operator ==X

bool operator==(const X&, const X&) { 
    // some logic here 
} 

然後讓隱式轉換的用途:

X x; 
std::cout << (42 == x) << " " << (x == 42) << std::endl;