用法
dynamic_cast<type>(expression);
type
必须是完整类类型或void*
的指针或引用。expression
是待转换的目标类型。若type
为引用,expression
必须也为引用;type
为指针,expression
必须也为指针。- 基类必须有虚函数(即必须有vtable)。也就是说基类和派生类之间必须实现多态。
dynamic_cast<type*>(e) //e是指针
dynamic_cast<type&>(e) //e是左值
dynamic_cast<type&&>(e) //e是右值
场景
将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。(如果是基类指针或引用调用的是虚函数,无需转换就能在运行时调用派生类的虚函数。)
C++引入了dynamic_cast 这种类型识别的强制转换,对识别错误的程序是有好处的,建议能用的地方就用。比起C的旧强制转换,它能在转换错误时返回0(指针)或抛出异常(引用)。