支持比较两个对象引用的相等运算符?

Equality operator that supports comparing two references to objects?

这是预先存在的代码,可以正常工作。

bool operator==(CMyClass X) {return m_Data==X.m_Data;}

if(a == b){...} //a and b are both CMyClass objects

但是现在我有代码了:

if(x.get() == y.get()){...} // get() returns CMyClass&

我已经将其更改为采用 const 引用

bool operator==(const CMyClass &X) {return m_Data==X.m_Data;}

我仍然得到编译错误:

error C2678: binary '==' : no operator found which takes a left-hand operand of type 'const CMyClass' (or there is no acceptable conversion)

我是否需要对现有运算符进行简单修改,或添加新的 2-arg 版本? 相等运算符不应该将 const ref 参数作为最佳实践吗?

相等运算符应通过 const 引用获取其参数(因为它不会对值进行任何更改),并且也是一个 const 函数(如果它是 class 成员)。

所以你的声明应该是

bool operator==(const CMyClass &X) const {return m_Data==X.m_Data;}

因为你的 get 函数 returns 和 const CMyClass &,你原来的相等比较是不可调用的,因为它不是 const 函数并且不能在常量对象。