仅使用显式构造函数检查类的对象

时间:2015-11-19 09:16:25

标签: c++ equality

为什么我不能仅使用显式构造函数检查两个类的对象是否相等?以下代码执行not compile

struct Foo
{
    explicit Foo(int x) : x_(x) {}
    int x_;
};

int main()
{
    Foo(1) == Foo(1);
}

我是否必须明确声明operator ==

4 个答案:

答案 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_; }

LIVE DEMO

答案 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_; }