仅使用显式构造函数对 类 的对象进行相等性检查
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_; }
编译器如何知道应该如何比较它们?如果要比较这些整数,请定义 operator==
或使用 Foo(1).x_ == Foo(1).x_
。
可能你误解了explicit
构造函数的意思。这是关于赋值运算符 =
而不是比较。标记您的构造函数 explicits
会禁用以下代码片段进行编译:Foo f = 1
.
是的,编译器不会为你生成相等性,所以你必须自己做。这也与显式构造函数无关; C++ 在任何时候都不允许隐式比较 类 或结构。
你需要一个像这样的运算符 ==:
bool operator==(const Foo& f) { return x_==f.x_; }
为什么我不能只用显式构造函数检查 类 的两个对象是否相等?以下代码执行 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_; }
编译器如何知道应该如何比较它们?如果要比较这些整数,请定义 operator==
或使用 Foo(1).x_ == Foo(1).x_
。
可能你误解了explicit
构造函数的意思。这是关于赋值运算符 =
而不是比较。标记您的构造函数 explicits
会禁用以下代码片段进行编译:Foo f = 1
.
是的,编译器不会为你生成相等性,所以你必须自己做。这也与显式构造函数无关; C++ 在任何时候都不允许隐式比较 类 或结构。
你需要一个像这样的运算符 ==:
bool operator==(const Foo& f) { return x_==f.x_; }