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

2024-05-14

Clang 警告(当使用-Weverything or Wglobal-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

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

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;
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐