c++ dynamic-cast

c++ - ¿Cómo falla dynamic_cast?



dynamic-cast (1)

dynamic_cast devolverá NULL en una conversión incorrecta si está lanzando un puntero; lanzará std::bad_cast al lanzar referencias . Es un error de tiempo de compilación intentar convertir objetos con dynamic_cast (por ejemplo, con dynamic_cast<Derived>(base) )

De acuerdo con lo que leí, la ejecución de un dynamic_cast en tiempo de ejecución incorrecto puede lanzar una excepción de bad_cast o devolver cero.

¿Es correcto decir que devolverá cero si está lanzando punteros?

es decir:

class Base { virtual void a(){} }; class Derived: public Base {}; int main () { Base *base = new Base(); dynamic_cast<Derived*>(base); return 0; }

¿Y que lanzará una excepción de bad_cast al lanzar objetos?

es decir:

class Base { virtual void a(){} }; class Derived: public Base {}; int main () { Base base; Base& ref = base; dynamic_cast<Derived&>(ref); return 0; }