in c structure's, je suis assuré que: maintenant, en C ++, si j'ai: p> si oui. , pouvez-vous me donner une référence (comme "la langue de programmation C ++, la page XYZ")? P> Merci! P> P>
3 Réponses :
Il n'y a pas de garantie. À partir de la norme C ++ 03 (10/3, classe.Deived): P>
L'ordre dans lequel les sous-cotés de classe de base sont attribués dans l'objet le plus dérivé (1.8) est indéterminé. P> blockQuote>
Noté; Merci. :-) G ++ m'a presque fait croire que c'était garanti.
Notez une note latérale, la norme promet très peu sur la disposition des types non-POD - uniquement uniquement que l'ordre d'adresse des éléments de données non statiques non séparés par un spécificateur d'accès intermédiaire correspondra à l'ordre de déclaration (mais seulement dans la même "section de spécificateur d'accès").
Je n'imagine pas que ce serait, je ne sais pas pourquoi il aurait besoin d'être.
J'ai une question connexe. p>
Si vous avez héritage de diamant: P> permet de supposer que la structure de la mémoire est base: A: B: test, p> Remarque au point d'appel, tout le compilateur sait est l'adresse du début de L'objet, et afunc s'attend à être relatifs au début de l'objet B, ces deux adresses ne seront pas les mêmes! Alors, comment ça marche? p> Comme si B était de type B, les deux adresses seraient les mêmes ... p> p>
@matt: S'il vous plaît poser une nouvelle question.
C'est exactement l'exemple de 5,4 / 5 (mais avec des problèmes d'accessibilité supplémentaires) et est mal formé (un diagnostic est requis du compilateur).
Même si la mise en page pour les classes de base est non garanti a> dans la façon dont vous semblez avoir pensé (et même s'il existe plus de garanties pour les membres), ceci est garanti: parce que la distribution utilise un statique_cast (par 5,4) qui sera Convertissez correctement Cela ne serait pas garanti: p> & bar code> et la comparaison entre le pointeur à base et le pointeur-à-dérivé se convertira de la même manière. P>
@Roger: Un très bon point sur le static_cast code> conversions.