C++ 如何避免在c++;?

C++ 如何避免在c++;?,c++,C++,我读过。它说“不要使用静态构造函数”。我不理解这里的“静态构造函数”。它给出了一个全局变量是“静态构造函数”的例子 还有其他的“静态构造函数”吗 我知道“静态初始化命令失败”。“不使用静态构造函数”是否意味着“不使用全局变量”?替代品是什么 LLVM希望清除其项目中的所有“静态构造函数”以解决此问题。他们如何做到完美?我的意思是,如果我们使用全局变量,“静态初始化顺序失败”将永远存在。即使我们采用“第一次使用时构造”,它仍然会引起新的问题。LLVM的完美解决方案是什么 静态构造函数在这里是一个不

我读过。它说“不要使用静态构造函数”。我不理解这里的“静态构造函数”。它给出了一个全局变量是“静态构造函数”的例子

  • 还有其他的“静态构造函数”吗
  • 我知道“静态初始化命令失败”。“不使用静态构造函数”是否意味着“不使用全局变量”?替代品是什么
  • LLVM希望清除其项目中的所有“静态构造函数”以解决此问题。他们如何做到完美?我的意思是,如果我们使用全局变量,“静态初始化顺序失败”将永远存在。即使我们采用“第一次使用时构造”,它仍然会引起新的问题。LLVM的完美解决方案是什么
  • 静态构造函数在这里是一个不幸的名字。我想这里的意思是在
    main()
    之前运行的任何变量初始化。例如,这样的全局变量:
    inta=fn()。它将在
    main()之前调用
    fn()

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

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


  • 高度相关:@Rakete1111我以前读过。它并没有回答我的问题。它确实回答了问题1),因为你似乎不知道它们是什么(它们不存在)。不过,在我看来,你的问题可能有点过于宽泛了。你链接的llvm文档说:“其类型具有构造函数或析构函数的全局变量”。哪一部分你不明白?@Rakete1111不,我知道它不存在。我在这里使用双引号。这里提到的“静态构造函数”是指中提到的“静态构造函数”。我认为你在2)中的观点是不要创建一个依赖于另一个非常量的全局对象的全局对象?@CppLucifer:而不是“常量”是“非静态初始化的”。但这也不是100%正确。在编译单元中,定义全局对象动态初始化的顺序。因此,如果另一个全局对象在同一个编译单元中,并且以前定义过,那么可以依赖它。