consteval e constinit
Palavras-chave modernas de tempo de compilação
consteval e constinit é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Além de constexpr
O C++20 adiciona duas palavras-chave que tornam a programação em tempo de compilação mais precisa: consteval para funções garantidamente avaliadas em tempo de compilação e constinit para inicialização garantidamente feita em tempo de compilação.
consteval: funções imediatas
Uma função consteval deve ser avaliada em tempo de compilação. Diferentemente de constexpr, ela nunca pode ser executada em tempo de execução.
consteval int cube(int x) {
return x * x * x;
}
int main() {
constexpr int c = cube(3); // OK: compile time
return c;
}consteval rejeita chamadas em tempo de execução
Chamar uma função consteval com um valor de tempo de execução é um erro de compilação — a garantia é imposta.
consteval int cube(int x) { return x * x * x; }
int main() {
int n = 4;
// int bad = cube(n); // ERROR: n is not a constant
return cube(2);
}Por que consteval?
Use-a quando um cálculo não fizer sentido em tempo de execução — por exemplo, para gerar uma tabela constante ou validar um literal em tempo de compilação.
constexpr versus consteval
Funções constexpr podem ser executadas em tempo de compilação; funções consteval sempre são. Escolha consteval para proibir o uso acidental em tempo de execução.
constinit: inicialização estática garantida
constinit garante que uma variável estática ou local de thread seja inicializada em tempo de compilação, eliminando o problema da ordem de inicialização estática.
constinit int globalCount = 10; // initialized at compile time
int main() {
return globalCount;
}constinit não é const
Diferentemente de constexpr, uma variável constinit ainda pode ser modificada após a sua inicialização em tempo de compilação — essa palavra-chave apenas restringe a forma como ela é inicializada.
constinit int counter = 0;
int main() {
counter = 5; // OK: constinit allows mutation
return counter;
}Resolvendo o problema da ordem de inicialização
Para variáveis estáticas não locais em diferentes unidades de tradução, constinit força a inicialização estática (em tempo de compilação), portanto o valor fica pronto antes de qualquer inicialização dinâmica ser executada.
Comparação entre as três palavras-chave
constexpr: pode ser avaliado em tempo de compilação e é const. consteval: deve ser avaliado em tempo de compilação (funções). constinit: força a inicialização em tempo de compilação e permanece mutável.
Suporte do compilador
Esses são recursos do C++20. Compile com -std=c++20 (ou posterior) no GCC/Clang, ou com /std:c++20 no MSVC.
Escolhendo a ferramenta certa
Use consteval para forçar cálculos em tempo de compilação e constinit para tornar determinística a inicialização estática — juntos, eles tornam o C++ em tempo de compilação mais seguro.
Verificação rápida
Teste a sua compreensão de consteval e constinit.
Recapitulação
Você aprendeu as palavras-chave do C++20 consteval (funções que devem ser executadas em tempo de compilação) e constinit (inicialização garantida em tempo de compilação para variáveis estáticas, que continuam mutáveis). Junto com constexpr, elas oferecem controle preciso sobre a avaliação em tempo de compilação.
Perguntas Frequentes
A aula “consteval e constinit” é grátis?
Sim — o texto completo de “consteval e constinit” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “consteval e constinit”?
Palavras-chave modernas de tempo de compilação Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “consteval e constinit”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Variáveis e parâmetros const
- Funções-membro const
- constexpr e tempo de compilação
- consteval e constinit