Conheça o consteval do C++ 20

E um pequena introdução sobre o constexpr .


Conheça o consteval do C++ 20


constexpr é similar ao especificador const, a diferença é que ela é aplicável a mais tipos , como por exemplo, também em funções-membro estáticas e entre outros.

Logicamente, assim como const e auto, ela requer inicialização no momento da declaração. No Curso de C++ Moderno Avançado abordamos de forma mais detalhada sobre constexpr. Mas em resumo é:

O cálculo é feito em tempo de compilação ganhando um desempenho muito superior do que se não usasse constexpr. Exemplo de uso:

constexpr int x = (9 + 3) / ( 2 * 2 ) - 1;

Para obter dados da execução você pode usar o comando: time.

Para mais informações sobre constexpr veja aqui .


E o consteval ?

consteval pode ser resumido como uma melhoria do constexpr . Conceitualmente falando, de acordo com o cppreference , é um especificador que declara uma função ou modelo para ser uma função imediata .

Isso acima soou um pouco difícil de entender, mas em resumo é que a documentação se refere à ordem de execução.

O constexpr deixava “dúvidas” de qual seria o resultado após múltiplas utilizações para funções, o programadores tinham aquela sensação de que rodou em tempo de execução, logo, o consteval foi implementado a partir do C++20 para resolver essas discrepâncias.

Abaixo segue alguns exemplos de uso do consteval

Note que ela é usada para FUNÇÕES e só compila com -std=c++20 ou superior, avise isso à seu LSP! 😃

#include <iostream>

consteval unsigned ret_calc(int first_num){
  return (first_num + 3) / ( 2 * 2 ) - 1;
}

consteval int make_double(unsigned x){
  return 2 * x;
}

consteval auto self_mult(auto num){
  return num * num;
}

consteval static int increment(double x){
  return ++x;
}

int main(){
  // consteval int y = (9 + 3) / ( 2 * 2 ) - 1; // diferente de constexpr, isso não compila
  std::cout << ret_calc(9) << '\n';
  std::cout << make_double(3) << '\n';
  std::cout << self_mult(39.6f) << '\n';
  std::cout << increment(6) << '\n';
}

Links úteis:


cpp cppdaily


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!