Maison >développement back-end >C++ >Comment puis-je initialiser un membre constexpr statique à l'aide d'une fonction constexpr statique en C ?
L'objectif est d'obtenir une constante de compilation (valeur constexpr) calculée à partir d'un constexpr fonction, toutes deux dans le même espace de noms de classe.
class C1 { constexpr static int foo(int x) { return x + 1; } constexpr static int bar = foo(sizeof(int)); };
Cependant, cela échoue à la fois sur g -4.5.3 et g -4.6.3, citant l'utilisation d'expressions non constantes dans l'initialiseur.
class C2 { constexpr static int foo(int x) { return x + 1; } constexpr static int bar; }; constexpr int C2::bar = C2::foo(sizeof(int));
Alors que cela compile sur g -4.5.3, g -4.6.3 montre une incohérence et erreurs de redéclaration.
Selon la norme C (section 9.4.2), un membre de données statique constexpr ne peut être déclaré qu'avec une accolade ou un initialiseur égal dans la classe définition, où chaque clause d'initialisation doit être une expression constante.
Dans la "deuxième tentative", la déclaration n'a pas la déclaration requise accolade-or-equal-initializer.
Contrairement aux hypothèses initiales, les deux tentatives s'avèrent infructueuses. La norme interdit l'initialisation des membres de données constexpr statiques dans des contextes où la classe est complète.
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!