关于在C ++中复制初始化的代码示例是否相同?

时间:2013-10-28 23:36:14

标签: c++

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

Foo foo=10;

代码示例一:

Foo foo2=foo;

代码示例二:

Foo foo3(foo);

示例代码2与示例代码1相同吗?

2 个答案:

答案 0 :(得分:1)

  

示例代码2是否与示例代码1相同?

是的,两个对象foo2foo3将包含与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的复制构造函数explicitfoo2的初始化在foo3初始化时不起作用工作