Es gibt keine Garantie. Aus dem C ++ 03 Standard (10/3, class.ederived):
Die Reihenfolge, in der die Unterobjekte der Basisklasse im abgeleiteten Objekt (1.8) zugeordnet sind, ist nicht spezifiziert.
Auch wenn das Layout für Basisklassen nicht garantiert
%Vor% Da der Cast einen static_cast (per 5.4) verwendet, der &bar
korrekt konvertiert und der Vergleich zwischen pointer-to-base und pointer-to-derived ähnlich ist.
Dies wäre jedoch nicht garantiert:
%Vor%Ich kann mir nicht vorstellen, dass es so wäre, ich weiß nicht, warum es so sein müsste.
Ich habe eine verwandte Frage.
wenn Sie Diamantenvererbung haben:
%Vor%lässt annehmen, dass die Speicherstruktur Base: A: B: Test,
istHinweis zum Zeitpunkt des Aufrufs, der Compiler weiß, ist die Adresse des Anfanges des Objekts, und AFunc erwartet relativ zum Anfang des B-Objekts zu sein, diese beiden Adressen sind nicht die gleichen! Wie funktioniert es?
Wie wenn b vom Typ B wäre, wären die zwei Adressen gleich ...
Tags und Links c++ inheritance base-class object-address