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

时间:2017-07-15 11:00:15

标签: c++

我看过llvm coding style。它说“不要使用静态构造函数”。我不明白这里的“静态构造函数”。它给出了一个全局变量为“静态构造函数”的示例。

  1. 还有其他“静态构造函数”吗?
  2. 我知道“静态初始化命令惨败”。 “不使用静态构造函数”是否意味着“不要使用全局变量”?什么是替代品?
  3. LLVM希望清除其项目中的所有“静态构造函数”以解决问题。他们怎么做得很完美?我的意思是如果我们使用全局变量,“静态初始化顺序fiasco”将始终存在。即使我们申请“首次使用建设”,它仍然会引起新的问题。什么是LLVM的完美解决方案?

1 个答案:

答案 0 :(得分:1)

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

  2. 不,这并不意味着。如果静态初始化全局变量,则可以避免惨败。例如,int a = 2将被静态初始化。或者,constexpr构造函数的全局对象也将被静态初始化。

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