static_cast与dynamic_cast的区别
主要区别如下
(1)作用阶段方面:static_cast在编译时转换;dynamic_cast在运行时检查类型。
(2)转换目标:static_cast用于C语言强制转换可替代方案,可能存在信息丢失,没有运行时类型检查;dynamic_cast用于类继承层次间转换(上行转换,下行转换,类之间的交叉转换)。
(3)类层次的转换:在向上转换时,static_cast和dynamic_cast效果一样,且static_cast效率更高。static_cast是不安全的,dynamic_cast会进行类型检查,转换失败会返回nullptr。
(4)运行时代价:static_cast效率更高。
dynamic_cast原理
主要基于C++的RTTI(运行时类型检查),RTTI通过type info类型描述器实现,typeid(指针或引用),返回type_info(存于虚函数表中,找到name属性进行比较)。
注:太深究也挺无聊,知道是从这个方向解释即可。
参考
【英伟达C++一面static_cast与dynamic_cast的区别?dynamic_cast的原理】