struct Foo {
int value;
Foo(int v):value(v) {};
};
Foo foo=10;
代码示例一:
Foo foo2=foo;
代码示例二:
Foo foo3(foo);
示例代码二是否与示例代码一相等?
struct Foo {
int value;
Foo(int v):value(v) {};
};
Foo foo=10;
代码示例一:
Foo foo2=foo;
代码示例二:
Foo foo3(foo);
示例代码二是否与示例代码一相等?
示例代码二是否与示例代码一相等?
是的,这两个对象foo2
将foo3
包含相同value
的foo
. 可以看到两者的value
成员变量是一样的。
正如Johan Lundberg所指出的那样,Foo foo2 = foo;
仅在未声明构造函数的情况下才有效explicit
(如您的情况)。
他们都调用复制构造函数吗?
在这种情况下,是的,它们都调用了复制构造函数。请注意,如果:
Foo foo2 = foo;
曾是:
Foo foo2(0);
foo2 = foo;
将调用Foo(int)
构造函数,然后调用operator=
函数。
The two statements are not equivalent: foo2
is conceptually initialized by a copy of foo
while foo3
copies foo
directly. In your code you can't see the difference but if you make Foo
's copy constructor explicit
, the initialization of foo2
does not work while the initialization of foo3
does work.