[英]reinterpret_cast
在C++ without Fear: A Beginner's Guide That Makes You Feel Smart一書中,在第 (8) 章中,提到了以下關於reinterpret_cast
....從一種指針類型 (int ) 轉換為另一種 (char*)。 因為強制轉換改變了指向數據的解釋方式,所以它被稱為 reinterpret_cast,而不是 static_cast。*
你能在這里描述一下這一段嗎? 特別是操作命名方式的原因?
謝謝。
基本上, reinterpret_cast
將特定位置的位模式reinterpret_cast
解釋為不同的類型。
例如,請參見此處: http : //publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7l.doc%2Flanguage%2Fref%2Fclrc05keyword_reinterpret_cast.htm
reinterpret_cast 運算符生成一個新類型的值,該值與它的參數具有相同的位模式。
static cast
轉換會轉換參數,而不僅僅是重新解釋它。 您可以通過 static_casting an int
to float
和 reinterpret_casting an int
to float
來嘗試這個。 結果將完全不同。
這里沒什么好看的。 它真的只是想重新解釋一些東西。
從標准 5.3.10 開始,reinterpret_cast 旨在滿足以下情況:
- 指針可以顯式轉換為任何足夠大的整數類型以容納它。
- 整數類型或枚舉類型的值可以顯式轉換為指針。
- 指向函數的指針可以顯式轉換為指向不同類型函數的指針。
- 指向對象的指針可以顯式轉換為指向不同對象類型的指針。
- 有條件地支持將指向函數的指針轉換為指向對象類型的指針,反之亦然。
- 空指針值 (4.10) 被轉換為目標類型的空指針值。
- 如果 T1 和 T2 都是函數類型或都是對象類型,則“指向類型 T1 的 X 成員的指針”類型的純右值可以顯式轉換為不同類型的“指向類型 T2 的 Y 成員的指針”的純右值。
- 如果可以使用 reinterpret_cast 將“指向 T1 的指針”類型的表達式顯式轉換為“指向 T2 的指針”類型,則可以將 T1 類型的左值表達式轉換為“對 T2 的引用”類型。 也就是說,引用轉換 reinterpret_cast < T& >(x) 與使用內置 & 和 * 運算符的轉換 *reinterpret_cast< T* >(&x) 具有相同的效果(對於 reinterpret_cast< T&& >(x) 也類似) .
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.