根据这个问题C++ static initialization order的答案,似乎无法直接控制静态初始化的顺序。
但是,假设我要在构造函数中显式初始化静态变量,以获得依赖于不同全局对象foo
的静态初始化对象bar
。有没有办法让foo
的构造函数在调用时确定bar
是否已经静态初始化了?
也就是说,假设我有一个编译单元。
Foo::Foo() {
// Can I check here whether bar has already been initialized?
// do something that needs bar to be initialized
// If bar has not been initialized, then I will crash and burn.
}
// statically initialized foo
Foo foo;
在另一个编译单元中:
Bar bar;
目标是确保在bar
的(静态调用的)构造函数运行到需要foo
的点之前初始化bar
。
我们可以在bar
的构造函数中明确启动foo
,但我们需要知道bar
是否已经初始化。
答案 0 :(得分:1)
不可能,但如果您想了解如何实现在使用前始终初始化的内容,请查看std::cout
的实现