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:
Para obter dados da execução você pode usar o comando: time.
Para mais informações sobre constexpr
veja aqui .
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! 😃