在C++ reinterpret_cast
只能執行一組特定的轉換,在明確列出語言規範。簡而言之,reinterpret_cast
只能執行指針到指針的轉換和參考到引用的轉換(加上指針到整數和整數到指針的轉換)。這與演員的名字所表達的意圖是一致的:它意在用於指針/參考重新解釋。
你試圖做的不是重新解釋。如果你想重新詮釋的int
爲double
你必須將其轉換爲引用類型
double y = reinterpret_cast<double&>(x);
雖然相當於基於指針的重新解釋可能是更明確的
double y = *reinterpret_cast<double*>(&x); // same as above
不過請注意,而reinterpret_cast
可以轉換引用/指針類型,實際嘗試通過結果引用/指針讀取數據會產生未定義的行爲。
在任何情況下這一點,當然也沒有多大意義的平臺上int
和不同尺寸的double
(因爲在大double
情況下,你會讀超出x
佔用的內存)。
所以,最後,這一切都歸結爲你想要達到的目標。記憶重新解釋?往上看。某種更有意義的int
到double
轉換?如果是這樣,reinterpret_cast
不會幫你在這裏。
來源
2010-02-05 09:30:04
AnT
我從來沒有在C++中試過這個,所以我只是猜測。它是否工作,如果你投的浮動?難道不是這兩種類型的位長不同? – 2010-02-05 06:13:19
「'reinterpret_cast(x)'」你預計這個表達要做什麼? –
curiousguy
2012-07-25 15:58:08
int是32位。雙是64位。這可能是問題。你可以檢查一下嗎? – 2012-09-23 16:27:37