Maison >développement back-end >C++ >Les classes avec des initialiseurs de membres non statiques peuvent-elles être initialisées de manière globale en C ?
Initialisation agrégée pour les classes avec initialiseurs de membres non statiques
En C, l'initialisation agrégée est une syntaxe pratique pour initialiser les membres d'une classe ou struct sans appeler explicitement un constructeur. Cependant, l'utilisation d'initialiseurs de membres en classe soulève la question de savoir si la classe/structure reste un agrégat.
C 11 et statut d'agrégat
Selon le C 11, le fait d'avoir des initialiseurs de membres en classe empêche qu'une classe/structure soit considérée comme un agrégat. Cela est dû au fait que les initialiseurs de membres ressemblent à des constructeurs définis par l'utilisateur, qui ne sont pas autorisés dans les agrégats.
struct A { int a = 3; int b = 3; }; A a{0, 1}; // Invalid for C++11
C 14 et initialisation d'agrégat
Cependant, en C 14, cette restriction a été levée. L'initialisation globale est désormais autorisée pour les classes/structures avec des initialiseurs de membres non statiques. Cette modification a été apportée pour répondre aux commentaires des développeurs et simplifier la compréhension de l'initialisation des agrégats.
struct A { int a = 3; int b = 3; }; A a{0, 1}; // Valid for C++14
Prise en charge de G pour les agrégats C 14
Notez que G version 5.0 et versions ultérieures prend en charge l'initialisation globale C 14 pour les classes/structures avec des initialiseurs de membres non statiques. Cependant, les anciennes versions de G peuvent ne pas reconnaître cette syntaxe.
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!