Maison > développement back-end > C++ > Pourquoi la « mise en page standard » de C 11 nécessite-t-elle des contraintes strictes en matière de membres de données ?

Pourquoi la « mise en page standard » de C 11 nécessite-t-elle des contraintes strictes en matière de membres de données ?

DDD
Libérer: 2024-11-25 16:25:12
original
933 Les gens l'ont consulté

Why Does C  11's

Comprendre la définition de « mise en page standard » POD de C 11

C 11 a introduit une définition assouplie pour les types POD (Plain Old Data), connue sous le nom de « mise en page standard ». Cette définition spécifie des critères stricts auxquels une classe doit satisfaire pour être considérée comme une présentation standard. L'un des aspects surprenants de la définition réside dans ses restrictions sur les contrôles d'accès aux membres de données, sur les membres de données partageant le même type que les classes de base et sur la présence de plusieurs membres de données dans les classes constitutives.

Pourquoi les contrôles d'accès variables sont-ils interdits ?

Autoriser les membres de données avec différents contrôles d'accès perturberait l'exigence cruciale selon laquelle le premier membre et l'objet complet ont la même adresse. Ceci est nécessaire pour la conversion valide d'une adresse d'objet de mise en page standard en un pointeur vers son premier membre.

Pourquoi un type partagé entre le premier membre de données et la classe de base est-il interdit ?

Si le premier Le membre de données et la classe de base partagent le même type, cela introduit une ambiguïté dans la disposition de la mémoire. Les implémentations qui placent les classes de base avant les classes dérivées nécessiteraient un octet de remplissage pour empêcher la collision d'adresses. Cela entraverait une fois de plus la conversion fiable entre l'adresse de l'objet et son premier pointeur de membre.

Conséquences de plusieurs membres de données dans les classes constitutives

Au sein d'une seule classe, les membres sont attribués séquentiellement dans l'ordre de déclaration . Cependant, entre les classes, la présentation standard ne spécifie pas d'ordre d'attribution fixe. Le fait d'avoir plusieurs membres de données dans les classes constituantes introduit une incertitude dans la détermination du "premier" membre en mémoire, ce qui est essentiel pour la conversion d'adresse susmentionnée.

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