簡體   English   中英

reinterpret_cast

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM