作者QQ29 (我爱阿蓉)
看板C_and_CPP
标题[问题] reinterpret_cast的问题
时间Tue Mar 31 21:40:22 2009
请教各位
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)
1F:推 sunneo:最直接的答案是找reinterpret_cast的定义 03/31 21:43
2F:→ QQ29:我找了一些地方 都没有解释为什麽需要加上&耶@@ 03/31 21:45
3F:→ QQ29:大部分都是举 <double *> (&n);这样@@ 03/31 21:47
4F:推 chrisdar:等价於 double d = *(reinterpret_cast<double *>(&n)); 03/31 21:54
5F:推 chrisdar: double d = (double &)(n); 等价於 03/31 21:56
6F:→ QQ29:请教楼上 (double &)到底是什麽意思! 好奇怪的感觉 03/31 22:00
7F:推 avhacker:就是硬把 n 当 double 来解释 03/31 22:18
8F:推 avhacker:你可以把它想成这样:*reinterpret_cast<double*>(&n) 03/31 22:21
9F:→ avhacker:不过都是乱七八糟的写法,没什麽探讨价值 03/31 22:22
10F:→ QQ29:可是写 <double>(n)就不给过 一定要加上&呢? 03/31 22:26
11F:推 Fenikso:规定就是这样 没有理由的XD 03/31 22:27
12F:→ QQ29:规定!! 原来如此... 03/31 23:01
13F:推 littleshan:reinterpret_cast用在pointer或reference的转型 03/31 23:08
14F:→ QQ29:所以这里不是 reference就要写成像转成ref唷? 03/31 23:31
15F:推 sbrhsieh:如果你是要把 int promote/widen 成 double,要使用 04/01 00:09
16F:→ sbrhsieh:static_cast, double d=static_cast<double>(n); 04/01 00:10
17F:→ QQ29:你好 我测试一下n=9带进去转成float & 04/01 00:20
18F:→ QQ29:我用手算 值怎麽会是1.267~~~*10^-44呢? 04/01 00:20
19F:→ QQ29:就算解释成 float 也不会是那个值耶... 04/01 00:20
20F:推 chrisdar:int 4byte double 8byte 会掺垃圾进来 04/01 00:28
21F:→ QQ29:可是我是用float去测试 很奇怪@@ 04/01 00:42