-
生效时间不通
static_cast是静态转换, 发生在编译时
dynamic_cast是动态转换, 发生在运行时 -
主要用途不同
static_cast主要用于基本数据类型之间的转换
dynamic_cast主要用具有继承关系的类之前的指针或引用转换 -
转换失败时的结果不一样
static_cast转换失败, 会返回一个无效指针, 而不是nullptr
dynamic_cast转换失败,会返回nullptr -
性能
由于static_cast是编译时执行类型转换, 所以性能比dynamic_cast要高
static_cast也可用于向上转换(派生类向基类转换) 和 向下转换(基类向派生类转换), 不过要保证正确, 否则转换将导致未定义行为
总结:
所以父类子类之间的转换, 就用dynamic_cast就好了, static_cast不安全。基础数据类型之间的转换就用static_cast。
本文讨论了C++中的静态转换static_cast和动态转换dynamic_cast在生效时间、主要用途、转换失败处理、性能上的差异,强调了动态转换在处理父类子类关系时的安全性,以及static_cast适用于基础类型间的转换。
1681

被折叠的 条评论
为什么被折叠?



