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 ?
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.
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.
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.
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!