C++之类型转换

类型转换

隐式转换

先根据类型转换规则将运算对象的类型统一后再求值。

算术转换:把一种算术类型转换成另一种算术类型。

整型提升:将小整数类型转换成较大的整数类型。


显式转换

显式地将对象强制转换成另一种类型。

命名的强制类型转换 cast-name<type>(expression); 其中,type为转移的目标类型,expression是要转移的值,cast-name是static_cast, dynamic_cast, const_cast, reinterpret_cast的一种。

static_cast

用来强迫隐式转换,任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。
通常我们使用static_cast转换数值数据类型 (float->int),也可以将non-const对象转换为const对象,但是无法将const对象转换为non-const。

const_cast

被用来将对象的常量性转除。只能改变运算对象的底层const。如将const int类型转换为int类型。

reinterpret_cast

通常为运算对象的位模式提供较低层次上的重新解释。允许将任何指针转换为任何其他指针类型,但是会很容易带来风险。
例如将一个pointer to int转型为int。

dynamic_cast

主要用来执行“安全向下转型”,也就是用来决定某对象是否归属继承体系中的某个类型。
用于多态类型的转换。注意只适用于指针或引用

形式如下:

 //type必须是类 类型
 dynamic_cast<type*>(e) // e必须是一个有效的指针
 dynamic_cast<type&>(e) // e必须是一个左值
 dynamic_cast<type&&>(e) // e不能是左值
 // 上面形式中,e的类型必须符合以下三种条件中的一种:
 // e的类型是目标type的公有派生类
 // e的类型是目标type的公有基类
 // e的类型就是目标type的类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值