看板 C_and_CPP 關於我們 聯絡資訊
我非常好奇這種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