C++ reinterpret_cast


reinterpret_cast

編輯
reinterpret_cast是C++里的 強制類型轉換符。
外文名
reinterpret_cast
隸    屬
C++語言
類    型
強制類型轉換
作    用
把一個指針轉換成一個整數等

目錄

簡介

編輯
reinterpret_cast<type-id> (expression)
type-id 必須是一個指針、引用、算術類型、函數指針或者成員指針。它可以把一個指針轉換成一個整數,也可以把一個整數轉換成一個指針(先把一個指針轉換成一個整數,再把該整數轉換成原類型的指針,還可以得到原先的指針值)。

用法

編輯
該運算符的用法比較多。
操作符修改了 操作數類型,但僅僅是重新解釋了給出的對象的比特模型而沒有進行 二進制轉換
例如:int *n= new int ;
double *d=reinterpret_cast<double*> (n);
在進行計算以后, d 包含無用值. 這是因為 reinterpret_cast 僅僅是復制 n 的比特位到 d, 沒有進行必要的分析。
因此, 需要謹慎使用 reinterpret_cast.
static_cast 與 reinterpret_cast
reinterpret_cast是為了映射到一個完全不同類型的意思,這個關鍵詞在我們需要把類型映射回原有類型時用到它。我們映射到的類型僅僅是為了故弄玄虛和其他目的,這是所有映射中最危險的。(這句話是C++編程思想中的原話)
static_cast和reinterpret_cast的區別主要在於 多重繼承,比如
1
2
3
4
5
6
7
8
9
10
11
class  A {
     public :
     int  m_a;
};
 
class  B {
     public :
     int  m_b;
};
 
class  C :  public  A,  public  B {};
那么對於以下代碼:
1
2
C c;
printf ( "%p, %p, %p" , &c,  reinterpret_cast <B*>(&c),  static_cast  <B*>(&c));
前兩個的輸出值是相同的,最后一個則會在原基礎上偏移4個字節,這是因為 static_cast計算了父子類 指針轉換的 偏移量,並將之轉換到正確的地址(c里面有m_a,m_b,轉換為B*指針后指到m_b處),而reinterpret_cast卻不會做這一層轉換。
因此, 你需要謹慎使用 reinterpret_cast.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM