c++ - 如何避免在 C++ 中使用静态构造函数?

标签 c++

我已阅读 llvm coding style .它说“不要使用静态构造函数”。我不明白这里的“静态构造函数”。它给出了一个全局变量是“静态构造函数”的例子。

  1. 还有其他“静态构造函数”吗?
  2. 我知道“静态初始化顺序失败”。 “不使用静态构造函数”是否意味着“不使用全局变量”?什么是替代品?
  3. LLVM 想要清除其项目中的所有“静态构造函数”以解决问题。他们如何完美地做到这一点?我的意思是,如果我们使用全局变量,“静态初始化顺序失败”将始终存在。即使我们应用“Construct On First Use”,它仍然会导致新的问题。 LLVM 的完美解决方案是什么?

最佳答案

  1. 静态构造函数在这里是一个不幸的名字。我认为它们在这里指的是将在 main() 之前运行的任何变量初始化。例如,像这样的全局变量:int a = fn();。它会在 main() 之前调用 fn()

  2. 不,这不是那个意思。如果全局变量是静态初始化的,则可以避免失败。例如,int a = 2 将被静态初始化。或者具有 constexpr 构造函数的全局对象也将被静态初始化。

  3. 您必须使用可以静态初始化的全局变量。或者您可以完全删除所有全局变量。在我看来,几乎所有的全局变量都是糟糕设计的指标,如果可能的话应该避免使用它们。不过,我不知道 LLVM 对此的确切解决方案。

关于c++ - 如何避免在 C++ 中使用静态构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45117407/

相关文章:

c++ - 如何减少JSON对象?

c++ - 检查 cv::Point 是否在 cv::Mat 内

c++ - 在 main-visual studio-c++ 的右大括号处添加断点

c++ - 了解 C++ 中的以下数据类型

c++ - float vs unorm 0->1,哪个更精确?

c++ - #define var 在另一个#define in C

c++ - 对 C++ 中模板方法的 undefined reference

c++ - 是否可以自动推导函数模板的模板参数的基类?

c++ - 为什么 std::remove_if 认为 shared_ptr<T> 是谓词?

c++ - 将为数组分配多少内存