-
生效时间不通
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。