为了账号安全,请及时绑定邮箱和手机立即绑定

C++类型转换

C++类型转换

C++
DIEA 2018-11-11 12:12:28
class Point3d{public:    virtual ~Point3d(){};    Point3d(){x=1;y=0;z=0;};private:    float x,y,z;};Point3d* p3=new Point3d;float* pf=reinterpret_cast<float*>(p3);我们都知道不能这么转换,但是为什么不能呢?父类和子类的指针可以做类型转换,那么他们为什么可以转换呢?类型转换的本质什么呢?为什么可以或者不可以?这个和c++对象模型如何结合?
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

你得先明白 reinterpret_cast 、static_cast,dynmic_cast,const_cast 这几个关键字的作用和机制。

 

Point3d* p3=new Point3d;
float* pf=(float*)(p3);

你会发现,它是可以转换的,没有语法错误,也没有运行时错误。


查看完整回答
反对 回复 2018-11-15
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

就是让编译器把原有类型看成新的类型去处理。就这么简单,比如上例。p3对应的地址处本来是个类Point3d,占用内存4*(1+3)个字节,如果把p3强制转换成float型的pf,那么编译器会把该地址(pf指向的地址)当作float型对待,大小是4字节。仅此而已。


查看完整回答
反对 回复 2018-11-15
  • 3 回答
  • 0 关注
  • 587 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信