-1

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

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

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

4

1 回答 1

9

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

不,它并不是真的那样工作。C++11 标准的第 12.8/15 段规定:

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

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

— 如果成员 m 具有右值引用类型T&&,则直接使用static_cast<T&&>(x.m);

否则,基数或成员直接用 的相应基数或成员初始化x

换句话说:

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

你的愿望已经成为现实。

于 2013-06-11T21:11:49.440 回答