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(使用前将#替换为@)