如题, 不同类型的指针应该算是相同的吗?
因为本质上都是地址, 那么按理来说应该是static cast, 但是由于指针类型不同好像又是应该用reinterpret cast,所以这种情况下该用哪种类型转换呢?
PHP中文网2017-04-17 14:25:45
慎用reinterpret_cast
,因為這貨發明出來的目的就是用來忽悠編譯器的,他的轉換僅僅是更改了解釋方式,而對實際數據沒有任何更改,如果t的类型是TYPE
,那麼x=reinterpret_cast<>(t)
相當於*((TYPE*)(&x))=t
,如果你用reinterpret_cast
去把一個int轉換到float,那它只是把二進位資料完完整整拷貝了一遍,得到的結果並沒有什麼意義…當然退一步講,用reinterpret_cast
當然可以實現你想要的指標轉換
而static_cast
會檢查類型,所以可以用於內建類型的轉換(例如從int到float就能按照語義進行轉換),但如果是對於指針,必須是同一棵繼承樹上的類型才能互相轉換,並且只有上行轉換(從子類別到基底類別)才是保證安全的。
既然你的char*
和目標指針並沒有啥繼承關係,那麼顯然只能用reinterpret_cast
或C风格强转
話說題主最近在跟內存池較勁哈…
阿神2017-04-17 14:25:45
reinterpret_cast
只是進行重新解釋,並沒有實際涉及到地址的變換。在普通指標轉換的時候是沒有問題的,但是在父子類別指標之間轉換的時候,可能是不正確的結果。