Initialisation des membres statiques Constexpr à l'aide de fonctions statiques
Problème :
Vous souhaitez définir un membre constexpr avec une fonction statique, en l'initialisant avec une valeur calculée au moment de la compilation. Cependant, vous rencontrez des erreurs de compilation en essayant de le faire dans GCC.
Tentatives initiales :
Votre première tentative a placé le membre et la fonction constexpr statique dans la définition de la classe, déclenchant compiler les erreurs dans les anciennes versions de GCC. Votre deuxième tentative a déplacé ces éléments en dehors du corps de la classe, mais encore une fois, vous avez rencontré des problèmes dans les versions ultérieures.
Explication :
La norme C dicte des exigences spécifiques pour constexpr static membres de données. Ces membres doivent être initialisés à l’aide d’un initialiseur accolade ou égal, où chaque affectation est une expression constante. Lors de votre "deuxième tentative", vous n'avez pas respecté ce format.
Solution :
Malheureusement, l'initialisation d'un membre de données statique constexpr à l'aide d'une fonction statique n'est pas actuellement possible selon la norme C. En effet, les variables constexpr doivent être disponibles en tant que constantes de compilation à partir des corps des fonctions membres. Cependant, les fonctions statiques ne sont pas définies jusqu'à ce que la classe soit complète, ce qui rend impossible que l'expression soit une expression constante.
Problème observé dans GCC :
Votre première tentative aurait dû être valide mais peut avoir rencontré des bugs dans les versions antérieures de GCC. Si vous avez accès à une version plus récente de GCC, cela vaut la peine de réessayer le code initial.
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!