gpt4 book ai didi

c++ - 静态成员的静态数组 : possibility of initialization order fiasco

转载 作者:行者123 更新时间:2023-11-28 01:23:59 27 4
gpt4 key购买 nike

考虑以下代码:

class Foo {
public:
static const char one[];
static const char two[];
static const char* all[];
};

const char Foo::one[] = "one";
const char Foo::two[] = "two";
const char* Foo::all[] = {Foo::one, Foo::two};

int main()
{
for (const auto& x: Foo::all) {
std::cout << x << std::endl;
}
return 0;
}

如果按预期工作,但我正在使用静态变量(onetwo)来初始化另一个静态变量。我会在这里遇到静态初始化顺序失败吗?

我还可以将 constexpr 添加到所有声明并将初始化移动到声明:

class Foo {
public:
static const constexpr char one[] = "one";
static const constexpr char two[] = "two";
static const constexpr char* all[] = {one, two};
};

它会改变静态初始化顺序失败方面的任何内容吗?

最佳答案

在一个 TU 内,指定了初始化顺序(从上到下),因此您没有问题。

而且即使在不同的 TU 中拆分,您也不会读取值,所以也可以。(例如 const std::string Foo::all[] = {Foo::one, Foo::two})。

关于c++ - 静态成员的静态数组 : possibility of initialization order fiasco,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54810297/

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