C++ · Avançado · Inglês · Técnico
constinit
Especificador do C++20 que obriga uma variável estática ou thread_local a ser inicializada na compilação, sem exigir que seja constante depois. A variável pode mudar em execução.
Onde usar
Usado para evitar o problema da ordem de inicialização de globais, já que a inicialização constante acontece antes de qualquer código dinâmico. Diferente de constexpr, a variável continua modificável.
Em código
constexpr int base() { return 10; }
constinit int contador = base(); // compila
void inc() { ++contador; } // mutável
// constinit int x = rand(); // erroExemplos
Mark the global constinit to dodge the init order problem.
Marque o global como constinit para fugir do problema da ordem de inicialização.
constinit keeps it mutable, unlike constexpr.
constinit mantém mutável, ao contrário de constexpr.
Cuidado
constinit não torna a variável const; para isso combine com const ou use constexpr.
Origem
Contração de constant initialization, inicialização constante.