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 ?

Les classes avec des initialiseurs de membres non statiques peuvent-elles être initialisées de manière globale en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-21 00:49:13541parcourir

Can Classes with Non-Static Member Initializers Be Aggregate Initialized in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn