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

cmo*_*cmo -1 c++ constructor initialization class copy-constructor

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

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

问题: 手动编写一个复制构造函数,每个成员变量初始化为副本非常繁琐,并且随着成员变量数量的增加而变得荒谬可笑.有没有办法让隐式复制构造函数使用初始化列表?有没有其他方法可以手动编写初始化列表?

And*_*owl 9

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

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

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

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

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

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

换一种说法:

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

你的愿望已经成为现实.