如果我定义一个从多个其他结构继承的结构,那么我列出它们的顺序会如何影响这样的结果:
struct D: C,B{
D(): B(), C(){...}
};
简单的问题,但提前谢谢!
答案 0 :(得分: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-list中的基类名 - 然后,直接基类应按声明顺序初始化 出现在base-specifier-list中(无论顺序如何 MEM-初始化)。强>