支持比较两个对象引用的相等运算符?
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
函数并且不能在常量对象。
这是预先存在的代码,可以正常工作。
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
函数并且不能在常量对象。