[問題] reinterpret_cast的問題

看板C_and_CPP作者 (我愛阿蓉)時間16年前 (2009/03/31 13:40), 編輯推噓9(9012)
留言21則, 7人參與, 最新討論串1/3 (看更多)
請教各位 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)

03/31 21:43, , 1F
最直接的答案是找reinterpret_cast的定義
03/31 21:43, 1F

03/31 21:45, , 2F
我找了一些地方 都沒有解釋為什麼需要加上&耶@@
03/31 21:45, 2F

03/31 21:47, , 3F
大部分都是舉 <double *> (&n);這樣@@
03/31 21:47, 3F

03/31 21:54, , 4F
等價於 double d = *(reinterpret_cast<double *>(&n));
03/31 21:54, 4F

03/31 21:56, , 5F
double d = (double &)(n); 等價於
03/31 21:56, 5F

03/31 22:00, , 6F
請教樓上 (double &)到底是什麼意思! 好奇怪的感覺
03/31 22:00, 6F

03/31 22:18, , 7F
就是硬把 n 當 double 來解釋
03/31 22:18, 7F

03/31 22:21, , 8F
你可以把它想成這樣:*reinterpret_cast<double*>(&n)
03/31 22:21, 8F

03/31 22:22, , 9F
不過都是亂七八糟的寫法,沒什麼探討價值
03/31 22:22, 9F

03/31 22:26, , 10F
可是寫 <double>(n)就不給過 一定要加上&呢?
03/31 22:26, 10F

03/31 22:27, , 11F
規定就是這樣 沒有理由的XD
03/31 22:27, 11F

03/31 23:01, , 12F
規定!! 原來如此...
03/31 23:01, 12F

03/31 23:08, , 13F
reinterpret_cast用在pointer或reference的轉型
03/31 23:08, 13F

03/31 23:31, , 14F
所以這裡不是 reference就要寫成像轉成ref唷?
03/31 23:31, 14F

04/01 00:09, , 15F
如果你是要把 int promote/widen 成 double,要使用
04/01 00:09, 15F

04/01 00:10, , 16F
static_cast, double d=static_cast<double>(n);
04/01 00:10, 16F

04/01 00:20, , 17F
你好 我測試一下n=9帶進去轉成float &
04/01 00:20, 17F

04/01 00:20, , 18F
我用手算 值怎麼會是1.267~~~*10^-44呢?
04/01 00:20, 18F

04/01 00:20, , 19F
就算解釋成 float 也不會是那個值耶...
04/01 00:20, 19F

04/01 00:28, , 20F
int 4byte double 8byte 會摻垃圾進來
04/01 00:28, 20F

04/01 00:42, , 21F
可是我是用float去測試 很奇怪@@
04/01 00:42, 21F
文章代碼(AID): #19qXr7U- (C_and_CPP)
文章代碼(AID): #19qXr7U- (C_and_CPP)