Maison > développement back-end > C++ > Les classes avec des initialiseurs de membres peuvent-elles être des agrégats en C 14 ?

Les classes avec des initialiseurs de membres peuvent-elles être des agrégats en C 14 ?

DDD
Libérer: 2024-11-09 14:33:02
original
614 Les gens l'ont consulté

Can Classes with Member Initializers be Aggregates in C  14?

C 11 Initialisation globale pour les classes avec initialiseurs de membres

C 11 introduit l'initialisation globale à l'aide d'accolades pour les classes, permettant de spécifier des initialiseurs pour tous les membres de données non statiques. Cependant, la norme en C 11 soulève la question : des initialiseurs de membres en classe peuvent-ils exister au sein de structures agrégées ?

En C 11, avoir des initialiseurs de membres dans une classe rend la structure ou la classe non agrégée. Cette restriction découle de la conviction que les initialiseurs de membres en classe partagent des similitudes avec les constructeurs définis par l'utilisateur. Cependant, l'ajout d'initialiseurs de membres ne devrait pas automatiquement disqualifier une classe d'être un agrégat.

La norme C 14 résout ce problème en modifiant la définition des classes d'agrégat pour exclure uniquement les constructeurs fournis par l'utilisateur, privés ou protégés non statiques. les données membres, les classes de base et les fonctions virtuelles. L'inclusion des initialiseurs de membres comme disqualificatif a été supprimée.

Par conséquent, en C 14, une classe comme celle-ci est désormais considérée comme un agrégat :

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; 
Copier après la connexion

En C 11, ce qui précède le code aurait été invalide car A n’est pas un agrégat. Cependant, en C 14, le code est valide et l'objet a sera initialisé avec a = 0 et b = 1.

Les versions récentes de g (5.0 et supérieures) prennent désormais en charge la définition des agrégats de C 14 avec initialiseurs de membres non statiques. Par conséquent, l'exemple de code sera compilé en g avec -std=c 14 ou -std=c 1y.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal