2

我在 faq-lite 中阅读了有关 SIOF 的信息,但我仍然真的不明白为什么会发生这个问题。我有一个静态库(.a),我使用该库来使用它的静态 const 数据成员对象类型。然后我使用并分配给全局变量(对象)的静态 const 数据成员对象类型。但是,当我将全局变量用于我的主函数或任何本地函数时,全局变量似乎是空的。我显然知道我的问题是 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 数据成员对象也没有初始化?

非常感谢。

4

1 回答 1

4

静态初始化顺序惨败相当简单:单个翻译单元中的静态对象按照它们声明的顺序进行初始化,但不能保证不同翻译单元中的静态对象相对于每个翻译单元的初始化顺序其他。

因此,在您的具体示例中,foosinmain.cpp可以在 之前初始化foo::foofaa,在 中声明libsource.cpp

于 2011-01-19T01:58:58.377 回答