cmo*_*cmo -1 c++ constructor initialization class copy-constructor
我们都知道隐式复制构造函数的操作如下:默认构造所有成员变量,然后为每个成员变量分配适当的相应值.
我经常需要一个复制构造函数,它将 每个成员变量初始化为副本,而不是默认构造然后分配.(例如,我有一些const成员变量).
问题: 手动编写一个复制构造函数,将每个成员变量初始化为副本非常繁琐,并且随着成员变量数量的增加而变得荒谬可笑.有没有办法让隐式复制构造函数使用初始化列表?有没有其他方法可以手动编写初始化列表?
我们都知道隐式复制构造函数的操作如下:默认构造所有成员变量,然后为每个成员变量分配适当的相应值.
不,它并没有真正起作用.C++ 11标准第12.8/15段规定:
非联合类的隐式定义的复制/移动构造函数
X执行其基础和成员的成员复制/移动.[...]以适合其类型的方式复制/移动每个基本或非静态数据成员:- 如果成员是一个数组,则每个元素都使用相应的子对象进行直接初始化
x;- 如果成员m具有右值引用类型
T&&,则直接初始化为static_cast<T&&>(x.m);- 否则,基础或成员使用相应的基础或成员进行直接初始化
x.
换一种说法:
我经常需要一个复制构造函数,它将每个成员变量初始化为副本,而不是默认构造然后分配.(例如,我有一些const成员变量).
你的愿望已经成为现实.