C 11 introduziu o especificador constexpr, permitindo que funções sejam utilizadas em expressões constantes. Apesar de impor requisitos rigorosos ao comportamento da função, ela apresenta um benefício crucial.
Considere um cenário em que uma função de biblioteca retorna inicialmente uma constante, conforme ilustrado em awesome_lib.hpp:
inline int f() { return 4; }
Na ausência de constexpr, o código do cliente poderia usar esta função para fins que exigem constantes de tempo de compilação, como argumentos de modelo ou dimensões de array.
#include#include std::array ; // needs CT template arg int my_c_array[f()]; // needs CT array dimension
No entanto, se a implementação de f() fosse alterada para recuperar seu valor de um arquivo de configuração, esse código do cliente seria quebrado. Essa mudança alteraria efetivamente o uso da interface sem o conhecimento do codificador do cliente.
Ao marcar a função como constexpr, o programador reconhece que o código do cliente pode razoavelmente esperar sua natureza constante. Isto garante que o uso da função da biblioteca não seja comprometido por alterações de implementação. O compilador reforça essa expectativa, garantindo que o código do cliente não dependa de funções não constantes.
Semelhante ao especificador const para funções de membro, o especificador constexpr evita que o código do cliente dependa de recursos que podem não estar disponíveis no futuro. No entanto, eles diferem em seus mecanismos de aplicação.
O especificador const garante que outras funções-membro dentro de uma função-membro constante também sejam constantes, enquanto constexpr não impõe resultados constantes em tempo de compilação para todos os seus usos. Essa flexibilidade permite funções híbridas que podem retornar resultados em tempo de compilação quando possível, mas reverter para cálculos em tempo de execução em contextos não constexpr.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3