РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
20 of 815 menu

Ключевое слово constinit

Ключевое слово constinit применяется к переменным со статическим или потоковым временем жизни и требует, чтобы их инициализация происходила на этапе компиляции. В отличие от constexpr, оно не делает переменную константной - её значение можно изменять во время выполнения программы. Если инициализатор не может быть вычислен компилятором, программа не соберётся. Ключевое слово помогает избежать проблемы порядка инициализации статических объектов.

Синтаксис

constinit тип имя = инициализатор; constinit тип имя;

Ключевое слово указывается перед типом переменной. Его можно комбинировать с const и constexpr.

Пример

Объявим глобальную переменную с constinit и выведем её значение:

#include <iostream> using namespace std; constinit int num = 12345; int main() { cout << num << endl; return 0; }

Результат выполнения кода:

12345

Пример

Переменная с constinit может изменяться во время выполнения программы:

#include <iostream> using namespace std; constinit int num = 12345; int main() { num = 111; cout << num << endl; return 0; }

Результат выполнения кода:

111

Пример

Комбинация constinit и constexpr делает переменную одновременно константной и гарантированно инициализированной на этапе компиляции:

#include <iostream> using namespace std; constexpr constinit int num = 12345; int main() { cout << num << endl; return 0; }

Результат выполнения кода:

12345

Пример

Если инициализатор не является константным выражением, компилятор выдаст ошибку:

#include <iostream> using namespace std; int getValue() { return 12345; } constinit int num = getValue(); int main() { cout << num << endl; return 0; }

Результат выполнения кода:

error: 'constinit' variable 'num' does not have a constant initializer

Смотрите также

  • ключевое слово constexpr,
    которое вычисляет значение на этапе компиляции
  • ключевое слово consteval,
    которое требует вычисления функции на этапе компиляции
  • ключевое слово const,
    которое запрещает изменение переменной
  • ключевое слово static,
    которое задаёт статическое время жизни переменной
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить