只有具有显式构造函数的类的对象的平等检查

为什么我不能使用显式构造函数仅为平等检查两个类对象? 以下代码不能编译

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

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

我必须明确声明operator ==吗?


你需要重载相等operator==

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

bool operator==(Foo const &lhs, Foo const& rhs) { return lhs.x_ == rhs.x_; }

现场演示


编译器如何知道它应该如何比较它们? 要么定义operator==要么使用Foo(1).x_ == Foo(1).x_如果要比较这些整数。

也许你误解了explicit构造函数的含义。 这是关于调整运算符=而不是比较。 标记你的构造explicits将禁止下面的代码片段进行编译: Foo f = 1


是的,编译器不会为你生成平等,所以你必须自己做。 这不是关于显式构造函数的; C ++从未允许隐式地比较类或结构。

链接地址: http://www.djcxy.com/p/73785.html

上一篇: Equality check for objects of classes with explicit constructor only

下一篇: Are == and != operators compiler