動的キャスト
実行時にオブジェクトの型チェックと変換を行う、C++ のメカニズムで、多態性のあるクラス階層に対して、派生クラスのポインターか参照を、基底クラスのポインターか参照に変換するために用いられます。
動的強制構文は以下の通りです。
動的キャスト<新しい型>(式)
new_typeが変換後の型で、expressionが変換されるオブジェクトのポインタや参照です。
動的強制適用には下記条件を満たす必要があります。
- クラス階層において、親クラスには少なくとも一つは仮想関数がなければなりません。
- 変換対象は有効なポインタまたは参照でなければいけません。
- 変換先の型は有効なポインタまたは参照型でなければなりません。
- 変換対象の実際の型は、変換先の型と互換性がある、つまり、変換対象の型は、変換先の型か、変換先の型の派生型でなくてはならない。
変換が成功した場合、dynamic_cast は変換後のポインタまたは参照を返します。変換が失敗した場合、dynamic_cast はヌルポインタ (nullptr) を返したり、(参照の変換の場合) std::bad_cast 例外を送出します。
ダイナミックキャストは、多態性を持つクラス階層でのみ利用でき、多態性を持たないクラスでは利用できません。また、ダイナミックキャストは、実行時に型チェックを行うため実行時オーバーヘッドが比較的大きくなります。そのため、パフォーマンス要件の高い場面では、ダイナミックキャストを多用しないよう注意してください。