2013-09-21 69 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初始化程序的順序如何)。