Funções constexpr e if constexpr
Avalie código em tempo de compilação com constexpr e crie ramificações com if constexpr
Funções constexpr e if constexpr é 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.
Avaliação em tempo de compilação
A palavra-chave constexpr informa ao compilador: "avalie isto em tempo de compilação quando possível". O cálculo em tempo de compilação não tem custo em tempo de execução.
Variáveis constexpr
Uma variável constexpr deve ser inicializada com uma expressão constante. O resultado fica fixo durante a compilação.
constexpr int BUFFER_SIZE = 1024;
constexpr double PI = 3.14159265358979;Funções constexpr
Marque as funções como constexpr para permitir que sejam executadas durante a compilação quando chamadas com argumentos constantes.
constexpr int factorial(int n) {
return (n <= 1) ? 1 : n * factorial(n - 1);
}
constexpr int five_fact = factorial(5); // computed at compile timeAlternativa em tempo de execução
Uma função constexpr também pode ser chamada com valores de tempo de execução — nesse caso, ela é executada em tempo de execução.
int n = read_input();
int result = factorial(n); // runtime callRestrições para funções constexpr
Antes do C++14:
- Apenas uma instrução return
- Nenhum laço
- Nenhuma modificação do estado local
O C++14 relaxou essas restrições; o C++17 e o C++20 adicionaram mais recursos (try-catch, alocação dinâmica e funções virtuais).
consteval (C++20)
Force a avaliação em tempo de compilação com consteval. Chamar uma função consteval com argumentos não constantes é um erro.
consteval int square(int x) { return x * x; }
constexpr int c = square(5); // OK
int x = 5;
// int r = square(x); // ERRORconstinit (C++20)
constinit garante que a variável seja inicializada durante a compilação, mas permite sua modificação em tempo de execução.
if constexpr (C++17)
if constexpr é uma ramificação em tempo de compilação. A ramificação que não for escolhida nem sequer será compilada — algo útil para modelos.
template <typename T>
void print(const T& value) {
if constexpr (std::is_pointer_v<T>) {
std::cout << "pointer: " << *value;
} else {
std::cout << value;
}
}Eliminando SFINAE
if constexpr substitui padrões complexos de SFINAE por uma lógica condicional clara. Combinado com características de tipo, torna o código genérico muito mais fácil de ler.
Algoritmos em tempo de compilação
O C++ moderno permite escrever algoritmos surpreendentemente complexos que são executados inteiramente durante a compilação — cálculo de hash de cadeias de caracteres, geração de tabelas e pequenos analisadores sintáticos.
constexpr auto fnv1a(std::string_view s) {
uint32_t h = 2166136261u;
for (char c : s) {
h = (h ^ static_cast<uint8_t>(c)) * 16777619u;
}
return h;
}
constexpr auto x = fnv1a("hello");Modelos e constexpr
Funções constexpr genéricas são uma combinação poderosa — escreva código genérico e flexível quanto aos tipos que seja avaliado durante a compilação.
Diagnósticos
Os erros em tempo de compilação no código constexpr são relatados com localizações detalhadas. Os compiladores modernos são bastante eficientes em identificar precisamente a etapa problemática.
Verificação rápida
O que if constexpr faz que um if comum não faz?
Recapitulação
constexpr permite a avaliação em tempo de compilação; consteval a torna obrigatória; constinit garante a inicialização durante a compilação. if constexpr cria ramificações durante a compilação — a ramificação que não for escolhida nunca é instanciada, substituindo SFINAE em muitos casos.
Perguntas Frequentes
A aula “Funções constexpr e if constexpr” é grátis?
Sim — o texto completo de “Funções constexpr e if constexpr” é 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 “Funções constexpr e if constexpr”?
Avalie código em tempo de compilação com constexpr e crie ramificações com if constexpr 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 “Funções constexpr e if constexpr”?
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
- Modelos de funções e classes: revisão
- Especialização parcial e total de modelos
- Modelos variádicos e pacotes de parâmetros
- Funções constexpr e if constexpr