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.
Mögliche Ausgabe: Ссылка
%Vor%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:
Diese Eigenschaft wird oft für die Serialisierung verwendet.
Tags und Links c++ casting void-pointers dynamic-cast