C ++继承顺序以什么方式影响构造函数?

时间:2013-09-21 04:49:42

标签: c++ inheritance inherited-constructors

如果我定义一个从多个其他结构继承的结构,那么我列出它们的顺序会如何影响这样的结果:

struct D: C,B{
    D(): B(), C(){...}
};

简单的问题,但提前谢谢!

1 个答案:

答案 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-初始化)。