C++是operator!=当operator == defined时自动提供

tha*_*sme 5 c++ operator-overloading

我想知道在我的班级中定义operator ==时是否自动提供operator!=?当我在A类中定义了operator ==时,显然A a,A b,a == b有效,但是a!= b则没有.但是我不确定它是否总会发生.这有什么例外吗?

Mik*_*our 11

不,操作员(除了分配)永远不会自动生成.根据以下方面定义它很容易==:

bool operator!=(A const & l, A const & r) {return !(l == r);}
Run Code Online (Sandbox Code Playgroud)


Woj*_*wka 8

运营商!=不会自动为您提供.如果您想要这样的自动化,您可能想要阅读有关rel_ops命名空间的信息.基本上你可以说

using namespace std::rel_ops;
Run Code Online (Sandbox Code Playgroud)

在使用之前operator !=.

  • 但要小心限制using指令的范围.它将为所有类型的操作员提供,而不仅仅是您感兴趣的操作员,这可能会产生令人惊讶的后果. (4认同)

iva*_*ukr 5

从 C++20 开始就是如此。早期的 C++ 标准版本不会自动从operator== 提供operator!=。