繁体   English   中英

C++ 隐式复制构造函数成员变量复制排序

[英]C++ implicit copy constructor member variable copy ordering

只是想仔细检查一下:C++ 标准保证隐式复制构造函数按声明顺序复制成员变量,对吗? 在下面的示例中, ab之前被复制,对吗? (假设AB都有非平凡的复制构造函数,并且在复制b之前复制a对正确性很重要。)

struct Foo {
  A a;
  B b;
};

我感兴趣的是它是由标准保证还是依赖于实现?

是的, 隐式定义的复制构造函数保证初始化顺序:

对于非联合 class 类型(类和结构),构造函数使用直接初始化按初始化顺序执行对象基类和非静态成员的完整成员方式复制。

数据成员的初始化顺序就是它们的声明顺序。

3) 然后,按照 class 定义中的声明顺序初始化非静态数据成员。

从标准, [class.copy.ctor]/14

(强调我的)

非联合 class X 的隐式定义的复制/移动构造函数执行其基和成员的按成员复制/移动。 [注意:非静态数据成员的默认成员初始化器被忽略。 另请参见 [class.base.init] 中的示例。 — 尾注]初始化的顺序与用户定义的构造函数中基类和成员的初始化顺序相同(参见[class.base.init] )。

[class.base.init]/13.3

然后,非静态数据成员按照它们在 class 定义中声明的顺序进行初始化(同样不管mem-initializers的顺序)。

暂无
暂无

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

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