0Pricing
C++ Academy · Aula

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

  1. Variáveis e parâmetros const
  2. Funções-membro const
  3. constexpr e tempo de compilação
  4. consteval e constinit
← Voltar para C++ Academy