参考effective c++
腾讯面试题 全局变量初始化顺序
1. static对象
包括global对象、定义域namespace作用域内的对象、class内或者函数内或文件作用域内被声明为static的对象
局部static对象,函数内声明的static对象,其他的都是全局static对象
2. 编译单元
产生单一目标文件的源码,基本上是单一源码文件加上包含的头文件
编译后形成目标文件,连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。
.c 或.cpp + 包含的.h文件 编译=>> 目标文件
问题:
如果某个编译单元内的某个non-local static对象的初始化动作使用了另外一个编译单元中non-local static对象,它所使用的对象可能没有初始化,因为c++对定义在不同编译单元的non-local static对象的初始化次序无明确定义。