dynamic_cast vs static_cast zu void *

8

In den letzten beiden Zeilen des unteren Programms verhalten sich static_cast<void*> und dynamic_cast<void *> unterschiedlich. Soweit ich weiß, wird das Ergebnis von dynamic_cast<void*> immer auf die Adresse des vollständigen Objekts aufgelöst. Also verwendet es RTTI in irgendeiner Weise. Könnte jemand erklären, wie Compiler RTTI verwendet, um zwischen den beiden zu unterscheiden.

%Vor%

Mögliche Ausgabe: Ссылка

%Vor%     
claudius 15.04.2014, 05:18
quelle

1 Antwort

9

Ab 5.2.7 / 7:

  

Wenn T "Zeiger auf cv void" ist, dann ist das Ergebnis ein Zeiger auf die meisten   abgeleitetes Objekt, auf das v verweist. Andernfalls wird eine Laufzeitprüfung angewendet   um zu sehen, ob das Objekt, auf das von v verwiesen wird oder auf das verwiesen wird, in konvertiert werden kann   der Typ, auf den T hinweist oder verweist.

Mit dynamic_cast<void*>(o) erhalten Sie also einen Zeiger auf das erste Byte des am weitesten "abgeleiteten" Objekts (wenn o polymorph ist).

Der Code, den der Compiler für dynamic_cast<void *>(...) erzeugt, ist ungefähr wie folgt:

%Vor%

Diese Eigenschaft wird oft für die Serialisierung verwendet.

    
manlio 15.04.2014, 07:54
quelle