Рассмотрим следующий код:
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};
};
Изменит ли это что-нибудь в отношении фиаско статического порядка инициализации?