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
в целом.