【发布时间】:2021-10-31 04:22:58
【问题描述】:
我正在阅读一本名为 Programming Principles and Practices using C++ 的书,但发现类构造的一种奇怪行为。 假设我有一个类如下:
class Foo {
public:
Foo(int x)
: y { x } { }
private:
int y;
};
我还有另一个类,它有一个类 Foo 的实例作为其成员对象
class Bar {
public:
Bar(Foo x)
: y { x } { }
private:
Foo y;
};
当我执行以下操作时:
int main()
{
Bar obj_1 { Foo { 1 } };
Bar obj_2 { 2021 }; // this doesn't give me error?
return 0;
}
obj_1 是按照构造函数中的指定构造的,但 obj_2 没有给我任何错误消息,而且对我来说,它似乎只是 神奇地 起作用。 我将一个类的成员作为另一个类的实例的意图是强制构造函数将类实例作为其参数,而不是整数。
为什么它不给我不正确的类型错误?
【问题讨论】:
-
魔法:编译器很聪明。它需要
Foo,但它得到了int,并且知道如何将int变成Foo。
标签: c++ class constructor