类之外的c ++,可变声明的顺序是否被保证是构造的顺序?

cod*_*der 3 c++ initialization

可以说我有代码:

main.cpp:

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

int main()
{
    :
    :
}
Run Code Online (Sandbox Code Playgroud)

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

如果我认为这两个对象在课堂上都可以,那将是正确的。

son*_*yao 7

是的,在单个转换单元内,保证全局变量的初始化按其定义的顺序进行排序。这意味着obj1可以保证在之前初始化obj2,然后在销毁obj2

3)有序动态初始化,该动态初始化适用于所有其他非局部变量:在单个转换单元中,这些变量的初始化始终准确的顺序排序,其定义出现在源代码中。

顺便说一句:类成员的初始化顺序还取决于它们的声明顺序,这与您在成员初始化程序列表中指定它们的方式无关。

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