我读到了faq-lite中的SIOF,但我真的不明白为什么会出现这个问题。我有一个静态库(.a),我使用该库来使用其静态const数据成员对象类型。然后,我使用的静态const数据成员对象类型并分配给全局变量(对象)。但是当我将全局变量用于我的main或任何本地函数时,似乎全局变量是空的。我明白我的问题是SIOF,但我真的不明白为什么我的静态const数据成员对象没有被初始化。
这是静态库所以我想当我们创建静态库时,静态const数据成员对象被编译并链接到那个静态库,如果我错了就纠正我。
//libsource.h
class foo
{
public:
....
public:
static const barbar foofaa;
};
//libsource.cpp
const barbar foo::foofaa = barbar();
//main.cpp
#include <libsource.h>
barbar foos= foo::foofaa;
int main()
{
//can't use foos because its empty
}
请指教。为什么静态const数据成员对象即使在静态库中也没有初始化?
非常感谢。
答案 0 :(得分:2)
静态初始化顺序fiasco非常简单:单个翻译单元中的静态对象按声明的顺序初始化,但不能保证不同翻译单元中的静态对象初始化的顺序相互尊重。
因此,在您的具体示例中,foos
中的main.cpp
可能会在foo::foofaa
之前初始化,libsource.cpp
在{{1}}中声明。