C++ 类成员初始化顺序

use*_*155 4 c++ initialization private class public

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

Nat*_*ica 6

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

\n
\n

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

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

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

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

    \n
  • \n
\n

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

\n

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

\n
\n

强调我的

\n

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

\n