如果我为结构手动重载 ==
运算符,我是免费获得 !=
运算符(大概定义为相反的 bool 值),还是执行我必须手动重载它(即使只是 return !(this == rhs)
?
编辑-问题不是我是否可以重载两个运算符,而是如果我已经重载了相等运算符,我是否必须重载不等式。无论如何,已经给出了很好的答案。
最佳答案
重载 operator ==
不会给你 operator !=
。您必须手动完成,规范的方法是按照 !(left == right)
中的 operator ==
来实现它。
运算符的语义不是由标准规定的。您可以很好地重载 operator ==
以表示相等,但将 operator !=
重载为不同的东西,例如加法甚至相等 (并不是说这是一个好习惯,其实应该不鼓励。有疑问时,按照整数做...)。[引用下面的(1)]
另一方面,Boost.Operators
可以帮助您为运算符提供规范的实现。还有 std::rel_ops
具有 operator !=
的规范实现。
(1) 要了解更多信息,请阅读 Three basic rules of operator overloading in C++.
关于c++ - 重载 '==' 会让你得到 '!=' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8000530/