-3
struct Foo {
  int value; 
  Foo(int v):value(v) {};  
  };

Foo foo=10;

代码示例一:

Foo foo2=foo;

代码示例二:

Foo foo3(foo);

示例代码二是否与示例代码一相等?

4

2 回答 2

1

示例代码二是否与示例代码一相等?

是的,这两个对象foo2foo3包含相同valuefoo. 可以看到两者的value成员变量是一样的。

正如Johan Lundberg所指出的那样,Foo foo2 = foo;仅在未声明构造函数的情况下才有效explicit(如您的情况)。

他们都调用复制构造函数吗?

在这种情况下,是的,它们都调用了复制构造函数。请注意,如果:

Foo foo2 = foo;

曾是:

Foo foo2(0);
foo2 = foo;

将调用Foo(int)构造函数,然后调用operator=函数。

于 2013-10-28T23:39:00.207 回答
0

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.

于 2013-10-28T23:44:20.417 回答