dynamic_castは型変換を実行時に検査しながら行う演算子。
主に仮想関数を持つ継承階層で、基底クラスへのポインタ(C++)や左辺値参照(C++)を安全に派生クラスへ変換したいときに使う。
例
class Base
{
public:
virtual ~Base() = default;
};
class Derived : public Base
{
};
Base* b{ new Derived{} };
Derived* d{ dynamic_cast<Derived*>(b) };この場合、bが実際にDerivedを指していれば、dはそのアドレスを受け取る。
失敗時
ポインタへのdynamic_castが失敗した場合、結果はnullptrになる。
Base base{};
Base* b{ &base };
Derived* d{ dynamic_cast<Derived*>(b) }; // dはnullptr参照へのdynamic_castが失敗した場合は、std::bad_cast例外が送出される。