它们在程序开始之前(即在main输入之前)初始化。当单个CPP文件中存在两个或多个(静态数据的)定义时,它们将按照在文件中定义它们的顺序进行初始化(文件中先前/后面定义的那个在下一个之前初始化)一个是)。当在多个CPP文件中存在两个或多个(静态数据的)定义时,处理CPP文件的顺序是未定义/特定于实现的。如果全局变量的构造函数(在程序启动之前调用)引用另一个可能尚未构造的CPP文件中定义的全局变量,则会出现此问题。但是,Meyers的Effective C ++(标题为确保全局对象在使用前已初始化)的第 47项确实描述了一种解决方法......在头文件中定义一个静态变量(它是静态的,所以你可以有多个实例而不需要链接器抱怨)让该变量的构造函数调用您需要的任何东西(特别是构造在头文件中声明的全局单例)...它说的是一种可以在某些系统头文件中使用的技术,例如确保cin在静态变量的构造函数使用它之前初始化全局变量。