8
votes

Garanties sur l'adresse de la base de base en C ++?

in c structure's, je suis assuré que: xxx

maintenant, en C ++, si j'ai: xxx

si oui. , pouvez-vous me donner une référence (comme "la langue de programmation C ++, la page XYZ")?

Merci!


0 commentaires

3 Réponses :


10
votes

Il n'y a pas de garantie. À partir de la norme C ++ 03 (10/3, classe.Deived):

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é.


2 commentaires

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").



1
votes

Je n'imagine pas que ce serait, je ne sais pas pourquoi il aurait besoin d'être.

J'ai une question connexe.

Si vous avez héritage de diamant: xxx

permet de supposer que la structure de la mémoire est base: A: B: test,

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?

Comme si B était de type B, les deux adresses seraient les mêmes ...


2 commentaires

@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).