如何处理clang中的全局构造函数警告?

新手上路,请多包涵

Clang 警告(使用 -WeverythingWglobal-constructors 时)关于静态对象的构造函数。

 warning: declaration requires a global constructor
      [-Wglobal-constructors]
A A::my_A; // triggers said warning
     ^~~~

为什么这是相关的,应该如何处理这个警告?

简单示例代码:

 class A {
  // ...
  static A my_A;
  A();
};

A A::my_A; // triggers said warning

原文由 Walter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 934
1 个回答

这是一个触发相同警告的更简单的情况:

 class A {
public:
  // ...
  A();
};

A my_A; // triggers said warning

test.cpp:7:3: warning: declaration requires a global constructor [-Wglobal-constructors]
A my_A; // triggers said warning
  ^~~~
1 warning generated.

这是完全合法且安全的 C++。

但是,对于您拥有的每个重要的全局构造函数,应用程序的启动时间都会受到影响。该警告只是让您了解此潜在性能问题的一种方式。

您可以使用 -Wno-global-constructors 禁用警告。或者您可以更改为这样的惰性初始化方案:

 A&
my_A()
{
    static A a;
    return a;
}

这完全避免了这个问题(并抑制了警告)。

原文由 Howard Hinnant 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题