我想知道在我的班级中定义operator ==时是否自动提供operator!=?当我在A类中定义了operator ==时,显然A a,A b,a == b有效,但是a!= b并不适用。但是我不确定它是否总会发生。这有什么例外吗?
答案 0 :(得分:8)
不,操作员(除了分配)永远不会自动生成。根据{{1}}:
来定义它很容易==
答案 1 :(得分:6)
答案 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!=。