C++类型转换

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++对象模型如何结合?


DIEA
浏览 588回答 3
3回答

慕桂英4014372

你得先明白 reinterpret_cast 、static_cast,dynmic_cast,const_cast 这几个关键字的作用和机制。&nbsp;Point3d* p3=new&nbsp;Point3d;float* pf=(float*)(p3);你会发现,它是可以转换的,没有语法错误,也没有运行时错误。

慕哥6287543

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