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);
你会发现,它是可以转换的,没有语法错误,也没有运行时错误。
慕哥6287543
TA贡献1831条经验 获得超10个赞
就是让编译器把原有类型看成新的类型去处理。就这么简单,比如上例。p3对应的地址处本来是个类Point3d,占用内存4*(1+3)个字节,如果把p3强制转换成float型的pf,那么编译器会把该地址(pf指向的地址)当作float型对待,大小是4字节。仅此而已。
- 3 回答
- 0 关注
- 587 浏览
添加回答
举报
0/150
提交
取消