只有具有显式构造函数的类的对象的平等检查
为什么我不能使用显式构造函数仅为平等检查两个类对象? 以下代码不能编译
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