1
如果我定义了多个其他结构继承的结构,请问为了我列出了他们的影响是这样的:C++继承顺序以何种方式影响构造函数?
struct D: C,B{
D(): B(), C(){...}
};
简单的问题,但在此先感谢!
如果我定义了多个其他结构继承的结构,请问为了我列出了他们的影响是这样的:C++继承顺序以何种方式影响构造函数?
struct D: C,B{
D(): B(), C(){...}
};
简单的问题,但在此先感谢!
构造的顺序取决于继承的顺序。初始化顺序无关紧要。 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初始化程序的顺序如何)。