dynamic_cast小结
dynamic_cast 仅用于类指针,类引用(引用可以是左值引用也可以是右值引用),void*类型的强制转换,该类必须是多态类型的类。即公有继承于其他类的类或者本身有虚函数的类。具有虚函数说明该类有指向派生类的意图,如果dynamic_cast用于不具有虚函数也不继承其他类的类将发生编译错误。
dynamic_cast<Type *>(e)
dynamic_cast<Type&>(e)
dynamic_cast<Type&&>(e)
只有三种情况以上转换过程可以成功:
- 当e是Type的公有派生类,转换会成功
- 当e是Type的父类指针或引用时,此时e实际必须指向派生类或者引用派生类,转换才会成功。即e是父类指针引用实际指向或引用子类对象时,转换将成功。如果是父类指针指向父类对象,转换失败
- 当e本身就是Type类型的对象,转换成功
当转换失败时,指针类型转换将返回空指针,引用类型将会抛出bad_cast异常