2 回答

TA貢獻1735條經驗 獲得超5個贊
reinterpret_cast是C++里的強制類型轉換符。 操作符修改了操作數類型,但僅僅是重新解釋了給出的對象的比特模型而沒有進行二進制轉換。 例如:int *n= new int ; double *d=reinterpret_cast<double*> (n); 在進行計算以后, d 包含無用值. 這是因為 reinterpret_cast 僅僅是復制 n 的比特位到 d, 沒有進行必要的分析。 因此, 需要謹慎使用 reinterpret_cast. == =========================================== == static_cast .vs. reinterpret_cast == ================================================ reinterpret_cast是為了映射到一個完全不同類型的意思,這個關鍵詞在我們需要把類型映射回原有類型時用到它。我們映射到的類型僅僅是為了故弄玄虛和其他目的,這是所有映射中最危險的。(這句話是C++編程思想中的原話) static_cast 和 reinterpret_cast 操作符修改了操作數類型。它們不是互逆的:另一方面;reinterpret_cast 僅僅是重新解釋了給出的對象的比特模型而沒有進行二進制轉換, 例子如下: int n=9; double d=static_cast < double > (n); 上面的例子中, 我們將一個變量從 int 轉換到 double。 這些類型的二進制表達式是不同的。 要將整數 9 轉換到 雙精度整數 9,static_cast 需要正確地為雙精度整數 d 補足比特位。其結果為 9.0。而reinterpret_cast 的行為卻不同: int n=9; double d=reinterpret_cast<double & > (n); 這次, 結果有所不同. 在進行計算以后, d 包含無用值. 這是因為 reinterpret_cast 僅僅是復制 n 的比特位到 d, 沒有進行必要的分析. 因此, 你需要謹慎使用 reinterpret_cast.

TA貢獻1859條經驗 獲得超6個贊
指針轉換通常不用這個.因為如果你希望指針的類型轉換,那么直接用(xxx*)這種形式或者static_cast就可以轉換了,而且這種轉換如果有問題編譯器也會提示,如果不提示那么這種轉換也是自然的,也就是說是安全的.
reinterpret_cast操作符修改了操作數類型,但僅僅是重新解釋了給出的對象的比特模型而沒有進行二進制轉換.
例如:int *n= new int ;
*n = 9;
double *d=reinterpret_cast<double*> (n);
在進行計算以后, d 包含無用值. 這是因為 reinterpret_cast 僅僅是復制 n 的比特位到 d, 沒有進行必要的分析,d中打印結果也不是9。 但是如果用static_cast轉換,那么d的值還是9,進行過安全的分析了
- 2 回答
- 0 關注
- 512 瀏覽
添加回答
舉報