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在类层次结构中执行向上和向下的强制转换操作,同时还应该检查转换的结果是否为空.
本文详细介绍了C++中的四种类型转换:static_cast、dynamic_cast、const_cast和reinterpret_cast。解释了它们之间的区别,并强调了在不同场景下使用这些转换的重要性。特别是针对父类和子类之间的类型转换,推荐使用dynamic_cast并检查转换结果。
1036

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



