C++ 类成员初始化顺序

2023-11-30

我知道在一个class成员按照列出的顺序进行初始化。这是否适用于将变量分组为public and privateETC?我的困惑是我无法弄清楚是否存在诸如private成员按照之前列出的顺序进行初始化public成员,无论私有变量在类声明中相对于公共列出的位置(我知道对基类成员存在这种偏见)


类初始化的规则在 [class.base.init]/11 中详细说明

在非委托构造函数中,初始化按以下顺序进行:

  • 首先,并且仅对于最派生类 (1.8) 的构造函数,虚拟基类按照它们在基类有向无环图的深度优先从左到右遍历中出现的顺序进行初始化,其中“左- to-right”是派生类基说明符列表中基类的出现顺序。

  • 然后,直接基类按照它们出现在基说明符列表中的声明顺序进行初始化(无论 mem 初始化程序的顺序如何)。

  • 然后,非静态数据成员按照它们在类定义中声明的顺序进行初始化(同样无论 mem 初始化程序的顺序如何)。

8 最后,执行构造函数体的复合语句。

[ 注意:声明顺序必须确保基类和成员子对象以与初始化相反的顺序销毁。 ——尾注]

emphasis mine

因此,当我们查看第 3 条时,它特别指出成员是按照定义中出现的顺序构造的。这意味着无论private, public,或者它们如何在类成员初始化列表中列出,它们将按照声明的顺序构造。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 类成员初始化顺序 的相关文章

随机推荐