私が理解しているように、動的キャストが静的キャストと異なるのは、RTTI の使用と、変数の動的型 (ベースから派生型へのキャスト時) が適合しない場合に失敗するという事実です。しかし、とにかく RTTI があるのに、なぜそれを行うためにクラスをポリモーフィックにする必要があるのでしょうか?
編集:「ポリモーフィック」という言葉の使用について混乱があったため、cplusplus.com のエントリを次に示します。
dynamic_cast は、オブジェクトへのポインターと参照でのみ使用できます。その目的は、型変換の結果が要求されたクラスの有効な完全なオブジェクトであることを確認することです。
したがって、クラスをそのベースの 1 つにキャストすると、dynamic_cast は常に成功します。
classes: class CBase { };
class CDerived: public CBase { };
CBase b; CBase* pb; CDerived d;
CDerived* pd;
pb = dynamic_cast<CBase*>(&d); //ok: derived-to-base
pd = dynamic_cast<CDerived*>(&b); //wrong: base-to-derived
基本クラスがポリモーフィックでない限り、基本クラスから派生クラスへの変換は dynamic_cast では許可されないため、このコードの 2 番目の変換ではコンパイル エラーが発生します。