C++_强制类型转换

本文详细介绍了C++中的四种强制类型转换:static_cast, const_cast, reinterpret_cast以及旧式强制类型转换。static_cast用于明确且安全的类型转换,const_cast用于改变对象的底层const属性,reinterpret_cast则用于底层位模式的解释,而旧式转换在某些情况下与命名转换等价,但不推荐使用。文章强调了安全使用强制类型转换的重要性。" 116057634,10553855,MATLAB求解六元一次方程组错误解析与解决,"['MATLAB编程', '数学求解', '方程组', '软件错误']
摘要由CSDN通过智能技术生成
cast-name<type>(expression);

cast-name : static_cast 、dynamic_cast 、 const_cast 、 reinterpret_cast。
dynamic_cast 支持运行时的类型识别。

static_cast

任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。
当需要把一个较大的算术类型赋值给较小的类型时,static_cast非常有用。
对于编译器无法自动执行的类型转换也非常有用。例如:

  • 我们可以使用static_cast找回存在于void *指针中的值:
void * p = &d;  //任何非常量对象都能存入void*
double *dp =static_cast<double*> (p); //必须确保转换后所得类型就是指针所指类型,不然,未定义。

const_cast

用于改变运算对象的底层const。
const_cast转换符是用来移除变量的const或volatile限定符。

const char *cp;
char * p=const_cast<char*> (cp); //正确,但通过cp写值是未定义行为

传统转换方式实现const_cast。const_cast实现原因就在于C++对于指针的转换是任意的,它不会检查类型,任何指针之间都可以进行互相转换,因此const_cast就可以直接使用显示转换(int*)来代替:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值