Maison >développement back-end >C++ >Un membre Constexpr statique peut-il être initialisé à l'aide d'une fonction Constexpr en C ?
Question originale :
En C , est-il possible de calculer une valeur constexpr (constante au moment de la compilation) à partir d'une fonction constexpr et le stocker en tant que membre statique d'une classe ?
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 une barre de membre constexpr statique utilisant 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 fait n'est pas une expression 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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!