C++不同指针直接互相转换用static cast还是reinterpret cast?
PHPz
PHPz 2017-04-17 14:23:45
0
2
533

如题, 不同类型的指针应该算是相同的吗?
因为本质上都是地址, 那么按理来说应该是static cast, 但是由于指针类型不同好像又是应该用reinterpret cast,所以这种情况下该用哪种类型转换呢?

PHPz
PHPz

学习是最好的投资!

全部回覆(2)
Ty80

慎用reinterpret_cast,因為這貨發明出來的目的就是用來忽悠編譯器的,他的轉換僅僅是更改了解釋方式,而對實際數據沒有任何更改,如果t的类型是TYPE,那麼x=reinterpret_cast<>(t)相當於*((TYPE*)(&x))=t,如果你用reinterpret_cast去把一個int轉換到float,那它只是把二進位資料完完整整拷貝了一遍,得到的結果並沒有什麼意義…當然退一步講,用reinterpret_cast當然可以實現你想要的指標轉換

static_cast會檢查類型,所以可以用於內建類型的轉換(例如從int到float就能按照語義進行轉換),但如果是對於指針,必須是同一棵繼承樹上的類型才能互相轉換,並且只有上行轉換(從子類別到基底類別)才是保證安全的。

既然你的char*和目標指針並沒有啥繼承關係,那麼顯然只能用reinterpret_castC风格强转

話說題主最近在跟內存池較勁哈…

阿神

reinterpret_cast只是進行重新解釋,並沒有實際涉及到地址的變換。在普通指標轉換的時候是沒有問題的,但是在父子類別指標之間轉換的時候,可能是不正確的結果。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!