首页 > 解决方案 > c++ 在类之外,变量声明的顺序是否保证是构造顺序?

问题描述

可以说我有代码:

主.cpp:

my_obj1 obj1("hello obj1");
my_obj2 obj2("hello obj2");

int main()
{
    :
    :
}

我想知道是否obj1总是保证在之前创建obj2

如果这两个对象在一个类中,我认为我们可以说这是真的。

标签: c++initialization

解决方案


是的,在单个翻译单元中,全局变量的初始化保证按照它们的定义顺序进行排序。这意味着obj1保证在之前被初始化obj2,在之后被销毁obj2

3)有序动态初始化,适用于所有其他非局部变量:在单个翻译单元中,这些变量的初始化总是按照它们在源代码中的定义出现的确切顺序进行排序

BTW:类成员的初始化顺序也由它们的声明顺序决定,这与你在成员初始化器列表中如何指定它们无关。

3) 然后,按照类定义中的声明顺序初始化非静态数据成员。


推荐阅读