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

Is it possible to check whether a static variable has been initialized yet in C++?

本文关键字:是否 静态 变量 初始化 检查 C++      更新时间:2023-10-16

根据C++静态初始化顺序这个问题的答案,似乎不可能直接控制静态初始化的顺序。然而,假设我在静态初始化的对象foo的构造函数内显式初始化静态变量,该对象依赖于不同的全局对象barfoo的构造函数在调用时是否有方法确定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;

目标是确保在foo的(静态调用的)构造函数运行到需要bar的点之前初始化bar。我们可以在foo的构造函数中显式地初始化bar,但我们需要知道bar是否已经初始化。

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