Maison  >  Article  >  développement back-end  >  Une classe avec des initialiseurs de membres en classe est-elle toujours un agrégat en C ?

Une classe avec des initialiseurs de membres en classe est-elle toujours un agrégat en C ?

DDD
DDDoriginal
2024-11-09 07:18:02474parcourir

Is a Class with In-Class Member Initializers Still an Aggregate in C  ?

C 11 Initialisation globale pour les classes avec des initialiseurs de membres non statiques

L'utilisation d'initialiseurs de membres en classe peut avoir un impact significatif sur le comportement de la classe dans C. Plus précisément, cela soulève la question de savoir si une classe reste un agrégat dans ces circonstances.

En C 11, les initialiseurs de membres en classe introduisent une restriction importante : ils interdisent la classification d'une classe ou d'une structure en tant qu'agrégat. Cela est évident dans le projet de norme C 11, qui définit un agrégat comme « une classe sans constructeurs fournis par l'utilisateur, sans initialiseurs accolade ou égal pour les données membres non statiques, sans données membres non statiques privées ou protégées, sans classes de base, et aucune fonction virtuelle. En introduisant des initialiseurs en classe, une classe devient similaire à un constructeur défini par l'utilisateur, perdant son statut agrégé.

Cependant, cette restriction a été levée en C 14. Les initialiseurs de membres n'empêchent plus une classe d'être considérée comme un agrégat, car la norme a été révisée pour supprimer cette limitation. Ce changement est détaillé dans N3605, qui propose de supprimer la restriction interdisant aux agrégats d'avoir des initialiseurs de membres.

La justification de ce changement découle de la reconnaissance du fait que les initialiseurs de membres ne sont pas équivalents aux constructeurs définis par l'utilisateur. Bien qu'ils partagent certaines similitudes, les initialiseurs de membres sont plus étroitement alignés sur le concept d'initialisation globale, qui est destiné à être un moyen léger et efficace d'initialiser des objets.

En conclusion, en C 11, membre en classe les initialiseurs disqualifiaient une classe du statut d'agrégation, mais cette limitation a été supprimée dans C 14, permettant une plus grande flexibilité dans l'initialisation de la classe.

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