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例外が送出される。

関連

参考