Assouplissement des exigences POD dans C 11 : exploration de sa justification
La norme C 11 a introduit une définition révisée des types de données anciennes (POD) , ce qui a soulevé quelques questions quant à ses choix de conception.
Restrictions d'accès aux données des membres Contrôle
Initialement, les POD devaient avoir des membres avec le même contrôle d'accès, empêchant ainsi différents niveaux d'accès pour les membres des données. Si cette restriction était levée, cela pourrait conduire à un comportement incohérent lors de la tentative d'accès aux membres à partir d'objets de différents niveaux d'autorisation.
Interdiction des membres de données qui se chevauchent
Une autre surprise dans la définition est l'interdiction des classes de base du même type que le premier membre de données. Cette restriction découle de la nécessité que le premier membre et l'objet complet aient la même adresse. S'ils se chevauchaient, convertir une adresse d'objet en type de son premier membre pourrait conduire à une ambiguïté.
Limitation de plusieurs classes de membres de données
L'exigence selon laquelle seulement au plus une classe de base comportant des données membres limite le risque d'ambiguïtés. Si plusieurs classes de base contenaient des données membres, la norme devrait spécifier un ordre d'allocation pour ces membres entre les classes, ce qui aurait un impact sur la flexibilité des implémentations de disposition de la mémoire.
La justification de ces restrictions
Ces restrictions garantissent que les classes de mise en page standard répondent à des critères spécifiques, permettant certaines optimisations :
Conclusion
La définition révisée du POD dans C 11 fournit un cadre plus flexible pour les classes à présentation standard tout en préservant les considérations critiques liées à la disposition de la mémoire objet. et l’accès aux données membres. Ces restrictions garantissent la cohérence et la fiabilité du comportement du POD, malgré leur potentiel de constructions inhabituelles comme l'exemple fourni.
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!