编译问题相等/不相等操作符
Compilation issue equality/inequality operators
我有以下代码序列,我不理解编译错误(代码下面)。
提前感谢,
Iulian
class X {
public:
int a;
X()
{
a = 0;
}
bool operator == (const X&r)
{
return a == r.a;
}
bool operator != (const X&r)
{
return !( *this == r );
}
};
class DX : public X
{
public:
int dx;
DX()
{
dx = 1;
}
bool operator == (const DX&r)
{
if( dx != r.dx ) return false;
const X * lhs = this;
const X * rhs = &r;
if ( *lhs != *rhs ) return false;
return true;
}
bool operator != (const DX&r)
{
return !( *this == r );
}
};
int main(void)
{
DX d1;
DX d2;
d1 == d2;
return 0;
}
错误:
d:Projectscpptests>cl opequal.cpp Microsoft (R) 32位C/c++优化编译器Version 15.00.30729.01 for 80x86微软公司。版权所有
opequal.cpp opequal.cpp(38): error C2678: binary '!=':无操作符find的左操作数类型为'const X'(或者存在)不接受转换)opequal.cpp(16):可以是bool X::operator !=(const X &)当尝试匹配参数列表'(const X, const X)'
您需要将operator==
和operator!=
函数声明为const。
。
bool operator == (const X&r) const
你的操作符函数声明应该是这样的
bool operator == (const X&r) const
将const放在成员函数的末尾,保证该函数不修改类的任何成员(除非这些成员声明为mutable
)。任何缺少此关键字的函数都被认为是一个mutator,编译器不允许在该类的const实例上调用它们。
可以用相同的实参重载函数,无论是否带const。在这种情况下,只能在类的const实例上调用const版本。例如,STL容器重载其操作符[]以返回const引用而不是普通引用。
相关文章:
- 两个字符串在 c++ 中不相等
- 如何以优化的方式同时迭代两个间距不相等的数组
- 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?
- C ++相同的字符串不相等(实际上是char*)
- 在 c++ 中比较不相等数组或字符串的方法
- C++ - 空的 std::list begin() 和 end() 不相等
- 列表大小为 1,但 front() 和 back() 不相等
- C++中[不]相等运算符的求值顺序
- 2 个指针,0 字节相差但不相等
- 将不相等的线读入向量的向量
- 如何打印一个不相等的三角形
- 为什么这两个char阵列不相等
- 不(!)和不相等(!=)之间有什么区别是C
- 为什么这些C 元组不相等
- 为什么整数的地板本身不相等(CPP)
- 当使用不相等vs均等时,是否存在任何性能差异
- 为什么这两个值在 arduino 上不相等
- 字符串在相等时比较不相等
- 将字符转换为 int 会显示不相等的数字
- 编译问题相等/不相等操作符