"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Um membro estático do Constexpr pode ser inicializado usando uma função Constexpr em C++?

Um membro estático do Constexpr pode ser inicializado usando uma função Constexpr em C++?

Publicado em 2024-12-22
Navegar:790

Can a Static Constexpr Member Be Initialized Using a Constexpr Function in C  ?

Constexpr inicializando membro estático usando função estática

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.

Tutorial mais recente Mais>

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