Pergunta original:
Em C , é possível calcular um valor constexpr (constante de tempo de compilação) a partir de uma função constexpr e armazená-lo como um membro estático de um class?
Primeiras tentativas e resposta dos compiladores:
A primeira tentativa de definir uma função constexpr estática foo dentro da classe e inicializar uma barra de membro constexpr estática usando foo falhou com erros em g -4.5.3 e g -4.6.3.
Explicação:
De acordo com o padrão C, um membro de dados constexpr estático pode ser inicializado na definição de classe usando uma chave ou igual -initializer, onde cada cláusula inicializadora deve ser uma expressão constante. O código fornecido violou esta regra, pois a inicialização de bar dependia da expressão const foo(sizeof(int)) dentro do corpo da classe, tornando-a não uma expressão constante.
Análise adicional:
Outras tentativas, incluindo mover a definição da função constexpr para fora do corpo da classe, ainda resultaram em erros em g -4.6.3, destacando específicos do compilador limitações.
Conclusão:
De acordo com o padrão C, inicializar um membro de dados constexpr estático com um inicializador envolvendo uma chamada de função constexpr não é permitido fora da definição de um função constexpr ou construtor constexpr. Isso se deve ao requisito de que as variáveis constexpr devem estar disponíveis como constantes de tempo de compilação nos corpos das funções-membro.
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