Es kann keinen Fehler bei der Kompilierung geben, weil eine Base-Derived-Beziehung zur Laufzeit existieren kann, abhängig von der Adresse der zu verarbeitenden Zeiger. static_cast
ist immer erfolgreich, aber wird undefined-Verhalten erhöhen, wenn Sie nicht auf den richtigen Typ zu werfen. dynamic_cast
kann fehlschlagen oder nicht und teilt Ihnen sogar mit, ob Sie versucht haben, den richtigen Typ zu verwenden oder nicht.
meiner Meinung nach also in sollte static_cast
nur gesenkten verwendet werden, wenn der Entwurf, dass eine solche Möglichkeit besteht, herstellen kann. Ein gutes Beispiel dafür ist CRTP. So ist es in manchen Situationen logisch, aber versuche es zu vermeiden, da es undefiniertes Verhalten ist.
RTTI ist nicht für static_cast
benötigt, die es theoretisch machen könnten schneller, aber ich werde jederzeit handel in einem dynamic_cast
gegen das undefinierte Verhalten, dass static_cast
verursachen kann!
Verwenden Sie die '010'-Taste oder Einzug um 4 Leerzeichen für Code-Markup. –
@sandeep, gibt es einen beabsichtigten Zweck zu den 'cout <<' Aussagen in diesen Konstruktoren? Soweit ich sehe, sind sie mit der Frage nicht verwandt und würden besser entfernt werden. –
Es sollte beachtet werden, dass, selbst wenn dieses Code-Snippet gut kompiliert wird, es ein ** undefiniertes Verhalten ** hat. Sie versprechen dem Compiler, dass 'a' auf ein B-Objekt verweist und Sie Ihren Compiler belügen. Nasale Dämonen sind auf dem Weg. –