是否可以检查静态变量是否已在C ++中初始化?

时间:2013-11-22 00:47:00

标签: c++

根据这个问题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是否已经初始化。

1 个答案:

答案 0 :(得分:1)

不可能,但如果您想了解如何实现在使用前始终初始化的内容,请查看std::cout的实现