这是预先存在的代码,工作正常。
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参数作为最佳实践?
答案 0 :(得分:2)
相等运算符应该通过const引用获取其参数(因为它不会对值进行任何更改),并且也是const函数(如果它是类成员)。
所以你的声明应该是
bool operator==(const CMyClass &X) const {return m_Data==X.m_Data;}
由于get
函数返回const CMyClass &
,因此原始的相等比较是不可调用的,因为它不是const
函数,不能在const对象上调用。