是否可以在C++中检查静态变量是否已初始化
Is it possible to check whether a static variable has been initialized yet in C++?
根据C++静态初始化顺序这个问题的答案,似乎不可能直接控制静态初始化的顺序。然而,假设我在静态初始化的对象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;
目标是确保在foo
的(静态调用的)构造函数运行到需要bar
的点之前初始化bar
。我们可以在foo
的构造函数中显式地初始化bar
,但我们需要知道bar
是否已经初始化。
不可能,但如果您想了解如何实现在使用前总是初始化的东西,请查看std::cout
的实现
相关文章:
- 添加静态constexpr成员是否会更改结构/类的内存映射
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- C++:是否可以使用非静态成员变量模板?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 检查编译时是否存在静态函数
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- C++编译器是否优化了顺序静态变量读取?
- 返回从字符串文本创建的静态string_view是否安全?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 初始值设定项列表是否足够静态以允许实例化模板?
- 程序如何知道静态变量是否需要初始化?
- 是否使用静态 constexpr 变量 odr?
- 使用静态成员函数而不是普通函数是否有任何开销?
- 如果可能,标准::映射分配是否静态