我已阅读 llvm coding style .它说“不要使用静态构造函数”。我不明白这里的“静态构造函数”。它给出了一个全局变量是“静态构造函数”的例子。
- 还有其他“静态构造函数”吗?
- 我知道“静态初始化顺序失败”。 “不使用静态构造函数”是否意味着“不使用全局变量”?什么是替代品?
- LLVM 想要清除其项目中的所有“静态构造函数”以解决问题。他们如何完美地做到这一点?我的意思是,如果我们使用全局变量,“静态初始化顺序失败”将始终存在。即使我们应用“Construct On First Use”,它仍然会导致新的问题。 LLVM 的完美解决方案是什么?
最佳答案
静态构造函数在这里是一个不幸的名字。我认为它们在这里指的是将在
main()
之前运行的任何变量初始化。例如,像这样的全局变量:int a = fn();
。它会在main()
之前调用fn()
。不,这不是那个意思。如果全局变量是静态初始化的,则可以避免失败。例如,
int a = 2
将被静态初始化。或者具有 constexpr 构造函数的全局对象也将被静态初始化。您必须使用可以静态初始化的全局变量。或者您可以完全删除所有全局变量。在我看来,几乎所有的全局变量都是糟糕设计的指标,如果可能的话应该避免使用它们。不过,我不知道 LLVM 对此的确切解决方案。
关于c++ - 如何避免在 C++ 中使用静态构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45117407/