以前一直遇到这个问题,总是去百度一下,然后觉得适合用dynamic就用dynamic,适合用static就用static。用过之后就忘了。
总觉得还是应该记录一下,让自己记住,以后不用在百度了。
dynamic_cass和static_cast都用在类型的转换上,dynamic_cast在用于父类指针转换为子类指针时,有动态检测功能,因为这种方向的转换是不安全的,所以转换后的返回值回事0.而static_cast则不会有这个检测,所以会直接把父类指针赋值给子类。如果子类调用了一个方法是父类没有的,就会出问题。
需要注意的是,用dynamic_cast的时候,如果父类没有虚函数,编译的时候会报错的。