要求详细描述“静态初始化订单Fiasco”

时间:2011-01-19 01:50:36

标签: c++ static-initializer

我读到了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数据成员对象即使在静态库中也没有初始化?

非常感谢。

1 个答案:

答案 0 :(得分:2)

静态初始化顺序fiasco非常简单:单个翻译单元中的静态对象按声明的顺序初始化,但不能保证不同翻译单元中的静态对象初始化的顺序相互尊重。

因此,在您的具体示例中,foos中的main.cpp可能会在foo::foofaa之前初始化,libsource.cpp在{{1}}中声明。

相关问题