gpt4 book ai didi

c++字符串常量和静态初始化顺序惨败

转载 作者:太空狗 更新时间:2023-10-29 20:50:27 25 4
gpt4 key购买 nike

我试图了解静态初始化顺序失败何时才是真正的问题。如果我使用像下面的 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;
}

最佳答案

main 函数将不会被调用,直到所有“全局”变量都被初始化。这包括 static 成员变量以及 namespace 范围内的变量(static 或不是)。

所以在这种情况下没问题,因为您在 main 函数中定义了 instance

如果 instance 的定义是在 main 函数之外静态完成的,情况会有所不同。

关于c++字符串常量和静态初始化顺序惨败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54569501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com