static_cast<the_type_to_convert_to>(expression) #从字面上来看,静态转换即编译时刻执行数据类型检测,当代码执行的时候不会去检测.
dynamic_cast<the_type_to_convert_to>(expression) #顾名思义,动态转换即在代码执行的时候进行数据类型检测,编译时不去检测数据类型.
const_cast<the_type_to_convert_to>(expression) #顾名思义,如果(expression) 是const类型则转换后(expression) 变为非const类型,如果(expression) 是非const类型则转换后变为const类型
reinterpret_cast<the_type_to_convert_to>(expression) #顾名思义,这个转换不会进行类型安全检测, 如果向下进行类型转换可能存在数据丢失.
重要部分:
强制类型转换,就是把不同类型的数据格式进行转换,但是因为数据格式的不同,那么在内存中的占位也不一样,因此在强制转换的过程中会存在数据丢失.
Ex, int 类型和long, char之间如果进行转换.
父类和子类之间的强制类型转换.
baseClass* bClass = new baseClass();
deriveClass* dClass = dynamic_cast<deriveClass*>(bClass);
dynamic_cast与static_cast之间的区别在于, dynamic_cast操作符在运行时检查转换的有效性,而static_cast操作符则不然,编译器依赖编码人员来保证static_cast操作的有效性,因此应该使用dynamic_cast在类层次结构中执行向上和向下的强制转换操作,同时还应该检查转换的结果是否为空.