为什么我的extern变量尚未初始化?

sho*_*app 5 c++ extern

我正在编译一个带有两个编译单元的共享库:globals.cppstuff.cpp.该globals.cpp文件初始化了一些用于的外部变量stuff.cpp.我遇到的问题是代码输入在stuff.cpp代码之前globals.cpp有机会为extern变量赋值.例如,我看到使用了一堆0值.这个问题取决于我编译/运行代码的平台 - 一些工作,一些不工作.

如何解决这个问题呢?我可以强制globals.cpp运行第一?

Mar*_*ork 6

你不能(以一致的方式)

但你可以解决它.

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)

你还有一个全局变量.但是通过将它放在一个函数中,我们知道它何时被使用.通过使用函数的静态成员,它在第一次调用函数时初始化,但在此之后不会.因此,您知道它将在首次使用之前正确构建.