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

时间:2018-04-25 17:46:34

标签: c++ visual-studio-2013 operator-overloading

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

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;}

我仍然遇到编译错误:

  

错误C2678:二进制' ==' :没有找到左手的操作员   类型' const CMyClass'的操作数(或者没有可接受的   转化率)

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

1 个答案:

答案 0 :(得分:2)

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

所以你的声明应该是

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

由于get函数返回const CMyClass &,因此原始的相等比较是不可调用的,因为它不是const函数,不能在const对象上调用。