C++强制类型转换


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在类层次结构中执行向上和向下的强制转换操作,同时还应该检查转换的结果是否为空.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值