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);我們都知道不能這么轉(zhuǎn)換,但是為什么不能呢?父類和子類的指針可以做類型轉(zhuǎn)換,那么他們?yōu)槭裁纯梢赞D(zhuǎn)換呢?類型轉(zhuǎn)換的本質(zhì)什么呢?為什么可以或者不可以?這個和c++對象模型如何結合?
3 回答

慕桂英4014372
TA貢獻1871條經(jīng)驗 獲得超13個贊
你得先明白 reinterpret_cast 、static_cast,dynmic_cast,const_cast 這幾個關鍵字的作用和機制。
Point3d* p3=new Point3d;
float* pf=(float*)(p3);
你會發(fā)現(xiàn),它是可以轉(zhuǎn)換的,沒有語法錯誤,也沒有運行時錯誤。

慕哥6287543
TA貢獻1831條經(jīng)驗 獲得超10個贊
就是讓編譯器把原有類型看成新的類型去處理。就這么簡單,比如上例。p3對應的地址處本來是個類Point3d,占用內(nèi)存4*(1+3)個字節(jié),如果把p3強制轉(zhuǎn)換成float型的pf,那么編譯器會把該地址(pf指向的地址)當作float型對待,大小是4字節(jié)。僅此而已。
- 3 回答
- 0 關注
- 617 瀏覽
添加回答
舉報
0/150
提交
取消