constexpr e tempo de compilação
Calcule valores em tempo de compilação
constexpr e tempo de compilação é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 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.
O que constexpr significa
constexpr informa ao compilador que um valor ou uma função pode ser avaliado em tempo de compilação, produzindo uma verdadeira constante em tempo de compilação.
#include <iostream>
int main() {
constexpr int size = 4 * 4; // computed at compile time
int arr[size];
std::cout << sizeof(arr) / sizeof(int) << "\n";
}Funções constexpr
Uma função constexpr pode ser executada em tempo de compilação quando recebe argumentos constantes e, caso contrário, em tempo de execução.
#include <iostream>
constexpr int square(int x) { return x * x; }
int main() {
constexpr int s = square(5); // compile time
int n = 6;
std::cout << s << " " << square(n) << "\n"; // second at runtime
}Constantes em tempo de compilação em arrays
Como os valores constexpr são conhecidos em tempo de compilação, eles podem dimensionar arrays e servir como argumentos de modelos.
constexpr versus const
const significa "não pode mudar"; constexpr significa "conhecido em tempo de compilação". Todo constexpr é implicitamente const, mas nem todo const é constexpr.
#include <iostream>
int main() {
int x;
std::cin >> x;
const int a = x; // const but runtime value
constexpr int b = 10; // compile-time constant
std::cout << b << "\n";
}constexpr recursivo
Funções constexpr podem ser recursivas, permitindo que o compilador calcule valores como fatoriais antes da execução do programa.
#include <iostream>
constexpr long factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
int main() {
constexpr long f = factorial(5); // 120 at compile time
std::cout << f << "\n";
}constexpr mais avançado no C++ moderno
Desde o C++14, funções constexpr podem conter laços, variáveis locais e ramificações, permitindo calcular constantes complexas em tempo de compilação.
#include <iostream>
constexpr int sumTo(int n) {
int total = 0;
for (int i = 1; i <= n; ++i) total += i;
return total;
}
int main() {
constexpr int s = sumTo(100);
std::cout << s << "\n";
}Variáveis constexpr devem ser inicializadas em tempo de compilação
Uma variável declarada como constexpr deve ter um inicializador que possa ser avaliado em tempo de compilação; caso contrário, o programa não será compilado.
Benefícios da computação em tempo de compilação
Calcular em tempo de compilação significa custo zero em tempo de execução, valores utilizáveis em contextos constantes e detecção antecipada de erros.
constexpr e modelos
Valores constexpr combinam naturalmente com modelos e com std::array, nos quais os tamanhos e parâmetros devem ser constantes em tempo de compilação.
Quando volta para a execução
Se uma função constexpr receber argumentos não constantes, ela simplesmente será executada em tempo de execução como uma função normal — sem erro.
Prefira constexpr para constantes
Use constexpr para constantes verdadeiras (dimensões, cálculos matemáticos e tabelas de consulta). Ele é mais expressivo que const e oferece garantias em tempo de compilação.
Verificação rápida
Teste a sua compreensão de constexpr.
Recapitulação
Você aprendeu que constexpr permite a avaliação de variáveis e funções em tempo de compilação, difere de const (que apenas proíbe modificações), aceita laços e recursão no C++ moderno e volta para a execução em tempo de execução quando recebe entradas não constantes.
Perguntas Frequentes
A aula “constexpr e tempo de compilação” é grátis?
Sim — o texto completo de “constexpr e tempo de compilação” é 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 “constexpr e tempo de compilação”?
Calcule valores em 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 3 de 4.
Quanto tempo leva a aula “constexpr e tempo de compilação”?
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