繁体   English   中英

C ++使隐式副本构造函数使用初始化列表

[英]c++ make implicit copy constructor use initialization list

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

通常,我希望有一个复制构造函数每个成员变量初始化为一个复制,而不是默认构造然后再赋值。 (例如,我有一些const成员变量)。

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

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

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

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

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

—如果成员m具有右值引用类型T&& ,则使用static_cast<T&&>(xm)直接初始化它;

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

换一种说法:

通常,我希望有一个复制构造函数将每个成员变量初始化为一个复制,而不是默认构造然后再赋值。 (例如,我有一些const成员变量)。

您的愿望已经成为现实。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM