看板 C_and_CPP 關於我們 聯絡資訊
http://nopaste.csie.org/a7b75 請教一下 這種C-Style轉型 我已經非常確定我塞下來是甚麼型態 只是用別的tyep收 要用的時候 在cast回來 這樣做 如果我非常確定 傳來是啥 我要用時我就轉回他原本的type 會不會有什麼問題? 還是說有甚麼風險是這種轉型有可能會遇到的? 因為現在遇到一個問題 發現轉型後 印出值也對但是function還沒return 程式就莫名出錯 exception 改成不轉型 傳來就是WCHAR* 收 就沒事 測試程式也都沒啥問題 只不過現在擺同樣邏輯到大程式 就出錯... 想不出可能會發生問題的點.... 覺得很莫名其妙 謝謝 ps. 如果是cast "值" 有可能會 double => int 失去4byte 當然轉回去會錯 但我現在是指標 會有可能出現甚麼問題嗎??? thx -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222 ※ 編輯: QQ29 來自: 219.87.64.222 (06/30 15:21)
tinlans:對 pointer 做 casting 要小心 strict aliasing 規則。 06/30 15:56
tinlans:你這個小程式倒是沒這問題,但「同樣邏輯」的實際 code 06/30 15:57
tinlans:是什麼,我就不得而知了。 06/30 15:57
QQ29:strict aliasing是什麼 我不知道我會去查查~ 06/30 16:16
QQ29:不過win32 API不是常常都需要轉型成void*再塞給他嗎 06/30 16:16
QQ29:還是說這void* 例外~還是說 win32 API內有做特別的事 06/30 16:17
QQ29:而不是單純的轉回來?? 06/30 16:17
QQ29:....網路上看不懂什麼是strict aliasing....但 07/01 01:19
QQ29:aliasing這個詞好像常聽到....但都不知道啥意思 07/01 01:19
akasan:把key word丟去google tinlans大大的blog就寫很清楚了說 07/01 09:18