cpp/keyword/dynamic cast
Da cppreference.com
Sintaxe:
T& dynamic_cast<T&> (object); T* dynamic_cast<T*> (object);
O dynamic_cast faz o cast(conversão) de um ponteiro ou referência de um tipo de dado para outro, com a realização de um runtime check como forma de garantir o validação desse cast.
Se você tentar fazer o cast do ponteiro para um outro tipo, e o tipo fornecido não for um argumento válido para o objeto, isso resultará em um cast de um ponteiro apontando para NULL.
Se você tentar fazer o cast de uma referência, e o tipo fornecido não for um argumento válido para o objeto, então seu cast irá lançar uma std::bad_cast exceção.
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); '' NULL, porquê 'a' não é um 'B' 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 }