c ++使隐式复制构造函数使用初始化列表

时间:2013-06-11 21:08:49

标签: c++ class constructor initialization copy-constructor

我们都知道隐式复制构造函数的操作如下:default构造所有成员变量,然后为每个成员变量分配相应的相应值。

我经常需要一个复制构造函数,它将初始化每个成员变量作为副本,而不是默认构造然后分配。 (例如,我有一些const成员变量。)

问题:手动编写一个复制构造函数,其中初始化每个成员变量作为副本非常乏味,并且数字很荒谬成员变量的增长。有没有办法让隐式复制构造函数使用初始化列表?有没有其他方法可以手动编写初始化列表?

1 个答案:

答案 0 :(得分:9)

  

我们都知道隐式复制构造函数的操作如下:default构造所有成员变量,然后为每个成员变量分配相应的相应值。

不,它并没有真正起作用。 C ++ 11标准第12.8 / 15段规定:

  

非联合类X的隐式定义的复制/移动构造函数执行成员复制/移动   其基地和成员。 [...]每个基础或非静态数据   成员以适合其类型的方式复制/移动:

     

- 如果成员是一个数组,则使用x的相应子对象直接初始化每个元素;

     

- 如果成员m的右值引用类型为T&&,则会使用static_cast<T&&>(x.m)进行直接初始化;

     

- 否则,使用x的相应基础或成员对基础或成员进行直接初始化。

换句话说:

  

我经常需要一个复制构造函数,它将每个成员变量初始化为一个副本,而不是默认构造然后分配。 (例如,我有一些const成员变量)。

你的愿望已经成为现实。