提问人:Lajos Nagy 提问时间:4/22/2020 最后编辑:songyuanyaoLajos Nagy 更新时间:4/22/2020 访问量:188
C++ 隐式复制构造函数成员变量复制排序
C++ implicit copy constructor member variable copy ordering
问:
只是想仔细检查:C++ 标准保证成员变量按隐式复制构造函数的声明顺序复制,对吗?在下面的例子中,被复制到之前,对吧?(假设两者都具有非平凡的复制构造函数,并且在复制之前复制正确性很重要。a
b
A
B
a
b
struct Foo {
A a;
B b;
};
我感兴趣的是它是否由标准保证或取决于实施?
答:
4赞
songyuanyao
4/22/2020
#1
是的,对于隐式定义的复制构造函数,可以保证初始化顺序:
对于非联合类类型(class 和 struct),构造函数将执行 对象的基和非静态成员的完整成员副本,在 它们的初始化顺序,使用直接初始化。
数据成员的初始化顺序是其声明的顺序。
3)然后,按照类定义中声明的顺序初始化非静态数据成员。
(强调我的)
非联合类 X 的隐式定义的复制/移动构造函数 执行其基和成员的逐成员复制/移动。[ 注: 非静态数据成员的默认成员初始值设定项将被忽略。 另请参阅 [class.base.init] 中的示例。— 尾注 ] 的顺序 初始化与碱基的初始化顺序相同,并且 用户定义构造函数中的成员(请参见 [class.base.init])。
然后,非静态数据成员按其初始化顺序进行初始化 在类定义中声明(同样,无论 mem-initializer 的顺序如何)。
评论