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