c++ - 重载 '==' 会让你得到 '!=' 吗?

标签 c++

如果我为结构手动重载 == 运算符,我是免费获得 != 运算符(大概定义为相反的 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/

相关文章:

c++ - 为什么我应该使用引用变量?

c++ - 如何管理标题的#include?

c++ - C中的内存访问优化

java - jni jiniArray 作为输出参数不会改变参数值

java - 在 Visual C++ 控制台应用程序中使用 jar 文件中的函数

c++ - MESI 缓存行中原子存储的语义

将 Quadprog C++ 与 Eigen 一起使用时的 C++ 编译错误

c++ - 条件预处理器相对于条件语句的优势

python - OpenCV(在 C++ 中)到 MQTT 代理

c++ - 如何最好地从 readyRead 信号的套接字中获取数据?