C++ 不同文件中全局变量的初始化顺序(gcc)

两个文件,每个文件里面都有全局对象,那么全局构造的顺序和编译时文件名的书写先后顺序一致。

举个例子:
t.h

struct T{
    int i;
    T(int i): i(i) {}
};

t1.cpp

#include 
#include "t.h"

extern T b;
T a(1);

t2.cpp

#include 
#include "t.h"

extern T a;
T b(a.i);

int main(){
    printf("t1.cpp %d ", a.i);
    printf("t2.cpp %d\n", b.i);
    return 0;
}

然后用不同的文件顺序分别编译:

$g++ -std=c++11  t1.cpp t2.cpp -o obj1
$./obj1

打印:t.cpp 1 t2.cpp 1

$g++ -std=c++11  t2.cpp t1.cpp -o obj2
$./obj2

打印:t.cpp 1 t2.cpp 0

可见全局构造的顺序和编译时文件名的书写顺序一致。

你可能感兴趣的:(C++ 不同文件中全局变量的初始化顺序(gcc))