2013-09-21 53 views

回答

1

构造的顺序取决于继承的顺序。初始化顺序无关紧要。 GCC实际上在这种情况下发出警告。

在构造 'd :: d()':

main.cpp中:16:17:警告:基地 'B' 将后 [-Wreorder]

D(): B(), C(){ 
      ^
被初始化

main.cpp中:16:17:警告:基地 'C'[-Wreorder]

main.cpp中:16:5:警告:这里初始化时[-Wreorder]

D(): B(), C(){ 

它在标准中也有明确规定。从部分12.6.2初始化碱和成员

初始化按照下列顺序进行:

- 首先,只对最派生类的构造,如下所述 , 虚基类应按照它们在 上出现的顺序对其进行深度优先从左到右遍历的基本类 的有向无环图进行初始化,其中“从左到右”是基类名称中出现 基类名的顺序派生类base-specifier-列表。
- 然后,直接基类应按声明顺序进行初始化,因为它们的 出现在基本说明符列表中(不管 mem初始化程序的顺序如何)。