请参阅here:
dynamic_cast只能用于指针和对类的引用 (或无效*)。其目的是确保类型的结果 转换指向目标的有效完整对象 指针类型。
这自然包括指针upcast(转换自 指向派生到指针到指针的指针,与允许的方式相同 隐式转换。
但是dynamic_cast也可以向下转换(从指针转换为 指向派生的多态类(具有虚拟成员的类) if - 且仅当 - 指向的对象是有效的完整对象 目标类型。
为什么dynamic_cast可以用于非多态类型的upcast,但对于非多态类型再次向下转换是不行的?