Рассмотрим следующий код:
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;
}
Если работает должным образом, но я использую статические переменные (one
и two
) для инициализации другой статической переменной.Могу ли я столкнуться с фиаско статического порядка инициализации здесь?
Я также могу добавить constexpr
ко всем объявлениям и переместить инициализацию в объявление:
class Foo {
public:
static const constexpr char one[] = "one";
static const constexpr char two[] = "two";
static const constexpr char* all[] = {one, two};
};
Изменит ли это что-нибудь относительно статической инициализациизаказать фиаско?