首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++隐式复制构造函数成员变量拷贝排序

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

Stack Overflow用户
提问于 2020-04-22 04:20:13
回答 1查看 161关注 0票数 1

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

代码语言:javascript
运行
复制
struct Foo {
  A a;
  B b;
};

我感兴趣的是它是否得到了标准的保证,还是它依赖于实现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 04:25:03

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

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

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

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

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

(强调地雷)

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

[class.base.init]/13.3

然后,按照类定义中声明的顺序初始化非静态数据成员(同样不考虑https://timsong-cpp.github.io/cppwp/class.base.init#nt:mem-initializer的顺序)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61357266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档