constinit - это новый ключевое слово и спецификатор в С++ 20, который был предложен в P1143.
Следующий пример приведен в стандарте:
const char * g() { return "dynamic initialization"; }
constexpr const char * f(bool p) { return p ? "constant initializer" : g(); }
constinit const char * c = f(true); // OK
constinit const char * d = f(false); // ill-formed
На ум приходит несколько вопросов:
Что означает
constinit? Почему это было введено? В каких случаях мы должны его использовать?Делает ли это переменную неизменной? Это подразумевает
constилиconstexpr?Может ли переменная быть
constиconstinit? Как насчетconstexprиconstinit?К каким переменным можно применить спецификатор? Почему мы не можем применить его к переменным non-
static, non-thread_local?Есть ли у нее какие-либо преимущества в производительности?
Этот вопрос предназначен для использования в качестве справочного материала для предстоящих вопросов о constinit в целом.