比方说我有:
class myClass
std::list<myClass> myList
Run Code Online (Sandbox Code Playgroud)
其中myClass没有定义==运算符,只包含公共字段.
在VS2010和VS2005中,以下内容无法编译:
myClass myClassVal = myList.front();
std::find( myList.begin(), myList.end(), myClassVal )
Run Code Online (Sandbox Code Playgroud)
抱怨缺乏==运算符.
我天真地认为它会对myClass对象的公共成员进行值比较,但我几乎肯定这是不正确的.
我假设如果我定义一个==运算符或者可能使用仿函数,它将解决问题.
或者,如果我的列表中包含指针而不是值,则比较可行.
这是正确的还是我应该做别的事?
编译器不会自动生成默认值operator==(),因此如果您自己不编写默认值,则无法比较类的对象是否相等.
如果你想在公共成员上进行成员比较,你必须自己实现operator==()(或"手动"使用单独的函数/函子来进行比较).