仅使用显式构造函数对 类 的对象进行相等性检查

Equality check for objects of classes with explicit constructor only

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

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

LIVE DEMO

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

可能你误解了explicit构造函数的意思。这是关于赋值运算符 = 而不是比较。标记您的构造函数 explicits 会禁用以下代码片段进行编译:Foo f = 1.

是的,编译器不会为你生成相等性,所以你必须自己做。这也与显式构造函数无关; C++ 在任何时候都不允许隐式比较 类 或结构。

你需要一个像这样的运算符 ==:

bool operator==(const Foo& f) { return x_==f.x_; }