我正在编译一个带有两个编译单元的共享库:globals.cpp和stuff.cpp.该globals.cpp文件初始化了一些用于的外部变量stuff.cpp.我遇到的问题是代码输入在stuff.cpp代码之前globals.cpp有机会为extern变量赋值.例如,我看到使用了一堆0值.这个问题取决于我编译/运行代码的平台 - 一些工作,一些不工作.
如何解决这个问题呢?我可以强制globals.cpp到运行第一?
你不能(以一致的方式)
但你可以解决它.
global.cpp
// If you have a global variable that has to be initial by a constructor
MyObj globalX;
// Instead do this
MyObj& globalX() { static MyObj x; return x;}
Run Code Online (Sandbox Code Playgroud)
你还有一个全局变量.但是通过将它放在一个函数中,我们知道它何时被使用.通过使用函数的静态成员,它在第一次调用函数时初始化,但在此之后不会.因此,您知道它将在首次使用之前正确构建.