Mik*_*ney 5 c++ static-initialization c++11
我试图了解静态初始化顺序失败何时是一个真正的问题。如果我使用如下所示的字符串常量,kName它会遇到静态初始化顺序失败的问题吗?Derived在这种情况下这是一个问题吗,因为可以在kName初始化之前创建的实例,如 中 所示main.cpp?
// Base.cpp
namespace test {
class Base {
public:
virtual ~Base() = default;
protected:
explicit Base(const std::string &name);
};
} // namespace test
// Derived.cpp
namespace test {
static const std::string kName = "my name";
class Derived : public Base {
public:
Derived() : Base(kName) {}
~Derived() override = default;
};
} // namespace test
// main.cpp
int main() {
test::Derived instance{};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
main在初始化所有“全局”变量之前,不会调用该函数。这包括static成员变量以及namespace作用域内(static或不在作用域内)的变量。
所以在这种情况下,这没有问题,因为你定义了函数instance内部main。
如果 的定义是在函数instance外部静态完成的,情况会有所不同main。