dynamic_cast 应用于具有多态性(或具有虚函数)的类之间。会对要转换的指针进行检查,如果指针指向的目标对象类型与所要转的类型一致,则转换成功。如果不一致,或完全是无关类型,则得到一个空指针。所以使用dynamic_cast时,对返回值进行判断。因为引用不存在空引用,dynamic_cast会在执行时抛出异常(std::bad_cast)。
static_cast 可以接受基类与子类的类型转换。对于基类与基类子类的子类之间的类型转换也能接受,但是这样的转换是有风险的。static_cast会在无关类型之间转换时报错。
reinterpret_cast 重解释类型的转换,在编译期或运行期都不做类型检查。使用的时候必须非常小心。