一千萬個為什麽

搜索

是否需要將“==”運算符定義為使用std :: find

假設我有:

class myClass
std::list myList

其中myClass沒有定義==運算符,只包含公共字段。

在VS2010和VS2005中,以下內容無法編譯:

myClass myClassVal = myList.front();
std::find( myList.begin(), myList.end(), myClassVal )

抱怨缺少==運算符。

我天真地認為它會對myClass對象的公共成員進行值比較,但我幾乎肯定這是不正確的。

我假設如果我定義一個==運算符或者可能使用仿函數,它將解決問題。

或者,如果我的列表中包含指針而不是值,則比較可行。

這是正確的還是我應該做別的事?

最佳答案

編譯器不會自動生成默認的運算符==(),因此如果您自己不編寫,則無法比較類的對象是否相等。

如果你想在公共成員上進行成員比較,你必須自己實現 operator ==()(或“手動”使用單獨的函數/函子進行比較)。

轉載註明原文: 是否需要將“==”運算符定義為使用std :: find