"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Un membre Constexpr statique peut-il être initialisé à l’aide d’une fonction Constexpr en C++ ?

Un membre Constexpr statique peut-il être initialisé à l’aide d’une fonction Constexpr en C++ ?

Publié le 2024-12-22
Parcourir:703

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

Constexpr Initialisation d'un membre statique à l'aide d'une fonction statique

Question originale :

En C, est-il possible de calculer une valeur constexpr (constante au moment de la compilation) à partir d'une fonction constexpr et de la stocker en tant que membre statique d'un class?

Premières tentatives et réponse des compilateurs :

La première tentative de définition d'une fonction constexpr statique foo dans la classe et d'initialisation d'une barre de membre constexpr statique à l'aide de foo a échoué avec des erreurs dans g -4.5.3 et g -4.6.3.

Explication :

Conformément à la norme C, un membre de données constexpr statique peut être initialisé dans la définition de classe à l'aide d'une accolade ou égale. -initializer, où chaque clause d'initialisation doit être une expression constante. Le code fourni a violé cette règle, car l'initialisation de bar reposait sur l'expression const foo(sizeof(int)) dans le corps de la classe, ce qui en faisait une expression non constante.

Analyse plus approfondie :

D'autres tentatives, notamment le déplacement de la définition de la fonction constexpr en dehors du corps de la classe, entraînaient toujours des erreurs dans g -4.6.3, mettant en évidence des erreurs spécifiques au compilateur. limitations.

Conclusion :

Selon la norme C, l'initialisation d'un membre de données constexpr statique avec un initialiseur impliquant un appel de fonction constexpr n'est pas autorisée en dehors de la définition d'un Fonction constexpr ou constructeur constexpr. Cela est dû à l'exigence selon laquelle les variables constexpr doivent être disponibles en tant que constantes de compilation dans les corps des fonctions membres.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3