2 回答

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

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
指針轉(zhuǎn)換通常不用這個(gè).因?yàn)槿绻阆M羔樀念愋娃D(zhuǎn)換,那么直接用(xxx*)這種形式或者static_cast就可以轉(zhuǎn)換了,而且這種轉(zhuǎn)換如果有問題編譯器也會提示,如果不提示那么這種轉(zhuǎn)換也是自然的,也就是說是安全的.
reinterpret_cast操作符修改了操作數(shù)類型,但僅僅是重新解釋了給出的對象的比特模型而沒有進(jìn)行二進(jìn)制轉(zhuǎn)換.
例如:int *n= new int ;
*n = 9;
double *d=reinterpret_cast<double*> (n);
在進(jìn)行計(jì)算以后, d 包含無用值. 這是因?yàn)?reinterpret_cast 僅僅是復(fù)制 n 的比特位到 d, 沒有進(jìn)行必要的分析,d中打印結(jié)果也不是9。 但是如果用static_cast轉(zhuǎn)換,那么d的值還是9,進(jìn)行過安全的分析了
- 2 回答
- 0 關(guān)注
- 529 瀏覽
添加回答
舉報(bào)