struct Foo {
int value;
Foo(int v):value(v) {};
};
Foo foo=10;
代码示例一:
Foo foo2=foo;
代码示例二:
Foo foo3(foo);
示例代码2与示例代码1相同吗?
答案 0 :(得分:1)
示例代码2是否与示例代码1相同?
是的,两个对象foo2
和foo3
将包含与value
相同的foo
。您can see两者的value
成员变量相同。
当Johan Lundberg发出通知时,Foo foo2 = foo;
仅在构造函数未声明为explicit
时才有效(就像您的情况一样)。
他们都调用复制构造函数吗?
在这种情况下,是的,他们都调用复制构造函数。请注意,如果:
Foo foo2 = foo;
是:
Foo foo2(0);
foo2 = foo;
将在Foo(int)
构造函数中调用,然后调用operator=
函数。
答案 1 :(得分:0)
这两个陈述不相同:foo2
在概念上由foo
的副本初始化,而foo3
副本foo
则直接初始化。在您的代码中,您无法看到差异,但如果您创建Foo
的复制构造函数explicit
,foo2
的初始化在foo3
初始化时不起作用工作