0Pricing
C++ Academy · Aula

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 time

Alternativa 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 call

Restriçõ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);            // ERROR

constinit (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

  1. Modelos de funções e classes: revisão
  2. Especialização parcial e total de modelos
  3. Modelos variádicos e pacotes de parâmetros
  4. Funções constexpr e if constexpr
← Voltar para C++ Academy