Привет
constinit спецификатор переменной указывает, что её начальное значение должно быть вычисленно в
compile-time
( с обращениям к consteval/eonctexpr функциям или ещё как )
Однако остаётся возможность менять состояние этой переменной в
run-time
А теперь вопрос: Почему они в стандарте решили
запретить указание
constinit для локальных "не статических не thread storage duration" переменных внутри функции?
Следовательно этот пример не компилируется:
https://godbolt.org/z/qb7zWdenM
int main()
{
constinit int i{0}; // error
return i;
}
error: 'constinit' can only be applied to a variable with static or thread storage duration (gcc)
error: local variable cannot be declared 'constinit' (clang)
И приходится такую простую штуку переписывать вот так:
https://godbolt.org/z/v9evjGaaa
int main()
{
static constinit int si{0};
int i = si;
return i;
}
Понятное дело что это упрощённый пример. Предполагается, что
нестатическая переменная будет ещё как использована (с возможностью изменения).