ExpertiDict

C++ · Avançado · Inglês · Técnico

constinit

ˈkɑːnst.ɪn.ɪtpalavra-chave

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();  // erro

Exemplos

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.

Veja também

Todos os termos de C++