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

时间:2014-07-24 15:52:20

标签: c++ operator-overloading

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

7 个答案:

答案 0 :(得分:8)

不,操作员(除了分配)永远不会自动生成。根据{{​​1}}:

来定义它很容易
==

答案 1 :(得分:6)

自动为您提供 运算符!=。如果您想要这样的自动化,您可能想要阅读rel_ops命名空间。基本上你可以说

using namespace std::rel_ops;

在使用operator !=之前。

答案 2 :(得分:3)

由于显而易见的原因,语言不提供您所追求的内容。您希望 boost::operators提供:

class MyClass : boost::operators<MyClass> {
    bool operator==(const MyInt& x) const;
}

会根据您的 operator!=()

为您提供operator==()

答案 3 :(得分:1)

如果您#include <utility>,则可以指定using namespace std::rel_ops

执行此操作会自动定义operator !=中的operator ==operator <=中的operator >=operator >operator <

答案 4 :(得分:0)

不,!=未按照==自动定义。 有一些泛型定义在帮助定义所有运算符的==和&lt;, 虽然。

答案 5 :(得分:0)

不。你必须明确定义它。

代码:

#include <iostream>

using namespace std;

class a
{
    private:
        int b;
    public:
        a(int B): b(B)
        bool operator == (const a & other) { return this->b == other.b; }
};

int main()
{
    a a1(10);
    a a2(15);
    if (a1 != a2)
    {
        cout << "Not equal" << endl;
    }
}

输出:

[ djhaskin987@des-arch-danhas:~ ]$ g++ a.cpp
a.cpp: In constructor ‘a::a(int)’:
a.cpp:11:9: error: expected ‘{’ before ‘bool’
         bool operator == (const a & other) { return this->b == other.b; }
         ^
a.cpp: In function ‘int main()’:
a.cpp:18:12: error: no match for ‘operator!=’ (operand types are ‘a’ and ‘a’)
     if (a1 != a2)
            ^
a.cpp:18:12: note: candidates are: ...

答案 6 :(得分:0)

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