dynamic_cast 只能用于继承体系下的转换,一般用于将基类转换为子类,需要考虑是不是设计有问题?
const_cast用于去除对象的const/volatile属性,一般用于适应接口,且明确接口不会修改对象。
reinterpret_cast 重新表达,告诉编译器将这段内存解释为指定的数据类型。因为我们知道,类型只是告诉编译器如何解释一段内存,内存还是那个内存,数据还是那份数据,在二进制上,它们没有任何区别。类型只是辅助解释!参见A view of memory and fundamental data types in cpp. 不安全,尽量少用。但用得保证能用对。
static_cast 最常用。