【发布时间】:2017-05-21 07:53:05
【问题描述】:
我试图了解在基类和类非静态成员实例化期间何时引用(涉及)初始化列表。看过this的文章和this的文章,总结了一个类的初始化顺序(我这里总结了)
初始化应按以下顺序进行:
首先,并且仅适用于最派生类的构造函数 如下所述,虚拟基类应在 它们出现在深度优先从左到右的遍历中的顺序 基类的有向无环图,其中“从左到右”是 派生类中基类名称的出现顺序 基本说明符列表。
然后,直接基类应在 出现在基本说明符列表中的声明顺序 (不管 mem-initializers 的顺序如何)。
然后,非静态 数据成员应按照它们被声明的顺序进行初始化 类定义(同样不管 内存初始化器)。最后,构造函数的主体被执行。
最后,构造函数的主体被执行。
现在我通过阅读以上内容了解到,首先创建基类,然后创建派生类。成员也按照它们在类定义中声明的顺序进行实例化,而不管它们在初始化列表中的位置。
这让我觉得每次在类实例化期间实例化基类或成员变量时(按照上面指定的顺序)C++ 基本上都会检查类的初始化列表以查看是否指定了任何特定参数或参数对于该基类或成员变量。如果未指定任何内容,则 c++ 会执行默认构造函数调用。我的理解是否正确。如果我错了,请纠正我。
【问题讨论】:
标签: c++ class initialization initialization-list