第一次面试(一) 关键词:reinterpret_cast 对象的内存印象 dynamic_cast

本文探讨了reinterpret_cast在C++中的作用和不安全性,解释了它如何进行比特位拷贝,并通过示例说明了静态和动态类型转换的区别。文章还介绍了在面试中遇到的关于reinterpret_cast的应用场景,包括从数据成员地址反推出结构地址以及如何访问私有数据。
摘要由CSDN通过智能技术生成

1、reinterpret_cast

不知道Adboe为什么总爱问reinterpret_cast这个很不安全的操作符的问题,既然人家问,就要搞清楚吧

reinterpret_cast的不安全,在于它是进行比特位的拷贝,例

int n=9;

double d=reinterpret_cast<double & > (n);  //这里不能用<double>编译会报错,似乎编译器认定<>里不可以有非指针类型(引用可以)。

结果就会出问题。原因 将整形转化成double引用,没有进行相应的二进制转化,只是把比特位简单拷贝。

为了验证以上的结论,做个试验,在上述两行代码下加行代码

int r=static_cast<int>d; //输出结果是8000 0000

然而当加如下代码时

int r=reinterpret_cast<int&>(d);//注意<>里还只能是引用

结果r=9;

 

注意:

A)这里提下static_cast,这个运算符可以转换类型,也可以转换指针,但是指针必须是基类和继承类,如果是double*和int*,会报编译错误,所以上述转换必须用reinterpret_cast。实际上用reinterpret_cast<>转化后的指针地址是一样的,不过切记指针类型已不同了,否则虽然地址相同,但解析成不同的指针类型,读到的最终结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值