为什么我不能仅使用显式构造函数检查两个类的对象是否相等?以下代码执行not compile
struct Foo
{
explicit Foo(int x) : x_(x) {}
int x_;
};
int main()
{
Foo(1) == Foo(1);
}
我是否必须明确声明operator ==
?
答案 0 :(得分:2)
您需要重载相等operator==
:
struct Foo {
explicit Foo(int x) : x_(x) {}
int x_;
};
bool operator==(Foo const &lhs, Foo const& rhs) { return lhs.x_ == rhs.x_; }
答案 1 :(得分:0)
如何让shoud编译器知道如何比较它们?如果要比较这些整数,请定义TestRun
或使用operator==
。
也许你误解了Foo(1).x_ == Foo(1).x_
构造函数的含义。它是关于对象运算符explicit
而不是比较运算符。标记构造函数=
会禁用以下代码段进行编译:{{1}}。
答案 2 :(得分:0)
是的,编译器不会为您生成相等,所以您必须自己完成。这不是关于显式构造函数;在任何时候,C ++都不允许隐式地比较类或结构。
答案 3 :(得分:0)
你需要一个运营商==那样:
bool operator==(const Foo& f) { return x_==f.x_; }