C++中4种强制类型转化。static_cast,const_cast,reinterpret_cast,dynamic_cast

本文介绍了C++中四种类型的强制转换:static_cast、const_cast、reinterpret_cast和dynamic_cast,并详细解释了每种类型转换的功能及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中4种显示强制类型转化。

一个命名的强制类型转换形式如下:cast_name<type>(expression);

cast_name强制类型转化的名字,是4种之一,type要将表达式转换成的类型,expression是将要被转换的表达式。

(1)static_cast:任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。比如:

int i,j;
double  d = static_cast<double>i/j;

另外,对于编译器无法自动执行的类型转换也非常有用。如:

double d;
void  *p = &d;
double *dp = static_cast<double*>(p);

(2)const_cast:强制去除常数性,更确切地说是将指向常数对象的指针的指针转变为一个指向非常数对象的指针。

如:

int  i = 3;
const  int * pc = &i;
*pc = 5;//这个是错误的,pc是一个指针常量,所指向对象的值不能改变
int * p =const_cast<int*>(pc);//去除pc 的const特性
*p = 5;//这个是可以的。

(3)reinterpret_cast:可用来改变指针类型,或将一个指针类型转变为整型以及将整型转变为指针类型。因为转换效果与具体代码实现息息相关,需谨慎地使用reinterpret_cast。使用reinterpret_cast是非常危险的,就尽量避免使用。

(4)dynamic_cast:用于继承层次中的类型转换。在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;区别就是static_cast的类型是基本类型,而dynamic_cast的类型是类类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值