看板 C_and_CPP 關於我們 聯絡資訊
請教各位 int n=9; double d=reinterpret_cast<double &>( n); cout<<d; 為什麼要在 cast那邊加上一個&???代表的是什麼意思.... 如果我沒有加上& 出現錯誤 'reinterpret_cast' : 無法由 'int' 轉換為 'double' 好奇怪 轉成reference 的解釋也不對...... 竟然google goo不到什麼資訊 = = 請問各位有合理的解釋嘛 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.207.211 ※ 編輯: QQ29 來自: 140.113.207.211 (03/31 21:42) ※ 編輯: QQ29 來自: 140.113.207.211 (03/31 21:43)
sunneo:最直接的答案是找reinterpret_cast的定義 03/31 21:43
QQ29:我找了一些地方 都沒有解釋為什麼需要加上&耶@@ 03/31 21:45
QQ29:大部分都是舉 <double *> (&n);這樣@@ 03/31 21:47
chrisdar:等價於 double d = *(reinterpret_cast<double *>(&n)); 03/31 21:54
chrisdar: double d = (double &)(n); 等價於 03/31 21:56
QQ29:請教樓上 (double &)到底是什麼意思! 好奇怪的感覺 03/31 22:00
avhacker:就是硬把 n 當 double 來解釋 03/31 22:18
avhacker:你可以把它想成這樣:*reinterpret_cast<double*>(&n) 03/31 22:21
avhacker:不過都是亂七八糟的寫法,沒什麼探討價值 03/31 22:22
QQ29:可是寫 <double>(n)就不給過 一定要加上&呢? 03/31 22:26
Fenikso:規定就是這樣 沒有理由的XD 03/31 22:27
QQ29:規定!! 原來如此... 03/31 23:01
littleshan:reinterpret_cast用在pointer或reference的轉型 03/31 23:08
QQ29:所以這裡不是 reference就要寫成像轉成ref唷? 03/31 23:31
sbrhsieh:如果你是要把 int promote/widen 成 double,要使用 04/01 00:09
sbrhsieh:static_cast, double d=static_cast<double>(n); 04/01 00:10
QQ29:你好 我測試一下n=9帶進去轉成float & 04/01 00:20
QQ29:我用手算 值怎麼會是1.267~~~*10^-44呢? 04/01 00:20
QQ29:就算解釋成 float 也不會是那個值耶... 04/01 00:20
chrisdar:int 4byte double 8byte 會摻垃圾進來 04/01 00:28
QQ29:可是我是用float去測試 很奇怪@@ 04/01 00:42