0Pricing
C++ Academy · Aula

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

  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