[英]In what ways does C++ inheritance order affect a constructor?
如果我定义了一个从多个其他结构继承的结构,那么列出它们的顺序将如何影响这样的事情:
struct D: C,B{
D(): B(), C(){...}
};
简单的问题,但在此先感谢!
构造顺序取决于继承顺序。 初始化顺序无关紧要。 在这种情况下,GCC实际上会发出警告。
在构造函数'D :: D()'中:
main.cpp:16:17:警告:[-Wreorder]之后将初始化基数'B'
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-initializers的顺序无关)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.