两个文件,每个文件里面都有全局对象,那么全局构造的顺序和编译时文件名的书写先后顺序一致。
举个例子:
t.h
struct T{
int i;
T(int i): i(i) {}
};
t1.cpp
#include <stdio.h>
#include "t.h"
extern T b;
T a(1);
t2.cpp
#include <stdio.h>
#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
可见全局构造的顺序和编译时文件名的书写顺序一致。