文法:
型& dynamic_cast<型&> (オブジェクト); 型* dynamic_cast<型*> (オブジェクト);
dynamic_castキーワードはデータのポインタや参照を他の型にキャストするのに使用されます。他のキャストと違う点は、実行時にキャストが妥当なものかどうかのチェックが行われる点です。
もしも、ポインタに対して、引数で指定されたオブジェクトの実際の型ではない型にキャストしようとすると、キャストした結果としてNULLが返されます。
同様に、参照に対して、実際の型ではない型にキャストしようとするとstd::bad_cast例外が投げられます。
struct A { virtual void f() { } }; struct B : public A { }; struct C { }; void f () { A a; B b; A* ap = &b; B* b1 = dynamic_cast<B*> (&a); // 'a'は'B'クラスではないのでNULL. B* b2 = dynamic_cast<B*> (ap); // 'b'. C* c = dynamic_cast<C*> (ap); // NULL. A& ar = dynamic_cast<A&> (*ap); // Ok. B& br = dynamic_cast<B&> (*ap); // Ok. C& cr = dynamic_cast<C&> (*ap); // std::bad_cast }
関連トピック: const_cast, reinterpret_cast, static_cast, casting_comparison