作者QQ29 (我愛阿蓉)
看板C_and_CPP
標題Re: [問題] reinterpret_cast的問題
時間Wed Apr 1 00:59:56 2009
我非常好奇這種cast方式
測試了許多東西
遇到怪事
http://msdn.microsoft.com/en-us/library/e0w9f63b(VS.80).aspx
看了這個example 他是把void*轉成 unsigned int;
很好很強大..........
我依樣改寫成
================================================
int p=5566;
void *pp=&p;
double dd=reinterpret_cast<double>(pp);
無法由 'void *' 轉換為 'double'
OS:double太大了?我轉一個同大小的
================================================
void *pp=&p;
float dd=reinterpret_cast<float>(pp);
無法由 'void *' 轉換為 'float
OS:失敗....難道只能用unsigned char? 我用char試試看
================================================
int *pp=&p;
char dd=reinterpret_cast<char>(pp);
神奇 完全沒warning................
OS:好吧我測測看我最愛用的int
================================================
void *pp=&p;
int dd=reinterpret_cast<int>(pp);
指標值由 'void *' 指派至 'int' 時會遭截斷
以上.............我完全想不透為什麼會這樣 與同學討論也沒結果
而且對於reinterpret_cast更是一頭霧水
是否有強者版友能夠解釋這現象是為什麼呢???
非常感謝~~~謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.207.211
推 Fenikso:The reinterpret_cast operator also allows any integral 04/01 08:57
→ Fenikso:type to be converted into any pointer type and vice 04/01 08:57
→ Fenikso:versa. 04/01 08:58
→ Fenikso:注意msdn上寫的是integral type, double不是 04/01 08:58
→ Fenikso:轉成int有warning是因為指標可能是64 bit, 這樣寫不安全 04/01 09:00
→ Fenikso:(網頁上的例子真的很爛..) 04/01 09:00
推 Fenikso:轉成char為什麼沒warning是個謎.. 04/01 09:04
推 Fenikso:大概是因為正常人都知道cast成char會truncate (?) 04/01 09:08