Re: [問題] reinterpret_cast的問題

看板C_and_CPP作者 (我愛阿蓉)時間16年前 (2009/03/31 16:59), 編輯推噓3(305)
留言8則, 1人參與, 最新討論串2/3 (看更多)
我非常好奇這種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

04/01 08:57, , 1F
The reinterpret_cast operator also allows any integral
04/01 08:57, 1F

04/01 08:57, , 2F
type to be converted into any pointer type and vice
04/01 08:57, 2F

04/01 08:58, , 3F
versa.
04/01 08:58, 3F

04/01 08:58, , 4F
注意msdn上寫的是integral type, double不是
04/01 08:58, 4F

04/01 09:00, , 5F
轉成int有warning是因為指標可能是64 bit, 這樣寫不安全
04/01 09:00, 5F

04/01 09:00, , 6F
(網頁上的例子真的很爛..)
04/01 09:00, 6F

04/01 09:04, , 7F
轉成char為什麼沒warning是個謎..
04/01 09:04, 7F

04/01 09:08, , 8F
大概是因為正常人都知道cast成char會truncate (?)
04/01 09:08, 8F
文章代碼(AID): #19qamDju (C_and_CPP)
文章代碼(AID): #19qamDju (C_and_CPP)