参考答案
结论:static_cast是编译期类型转换,无运行时检查;dynamic_cast用于多态类型向下转型,有RTTI运行时检查,失败返回nullptr或抛异常。区别:1. static_cast可转相关类型(数值、向上转型、void*等),向下转型不安全;2. dynamic_cast要求源有虚函数,遍历虚表RTTI信息判断继承兼容性。原理:dynamic_cast通过对象vptr找到type_info,检查目标类型是否在继承链中。示例:Base* b=new Derived; auto d=dynamic_cast<Derived*>(b); 若b非Derived则d为nullptr。static_cast效率高但危险,dynamic_cast安全有开销。