第一次使用xxx_cast的小經驗

以前只是在別人的代碼或者是框架自動生成的代碼中見到過這些操作符:const_cast,dynamic_cast,reinterpret_cast,static_cast。自己程序裏還是喜歡寫(BYTE*)p或者(LPCTSTR)p這樣的。這兩種轉換效果上通常沒有區別,用()轉不過來的,改成用xxx_cast也一樣轉不過來;用()會給出警告的,改成用xxxx_cast也一樣給出警告。

後來 寫某程序的時候有很多地址加減操作。代碼裏面滿是(BYTE *)(((DWORD)p) + xxx)這樣的東東。有個地方運行出錯了,偶一看,寫的是:(LPDWORD*)(DWORD)p + q,爲什麼會出錯呢,顯然是因爲優先級的原因。後來查了一下MSDN,發現偶平時不喜歡用的xxx_cast優先級比用括號語法的稍微高那麼一點點。而且這一點點很了不起,因爲如果不高這麼一點點的話,括號語法的cast是和+-運算符一樣等級的,從左到右算,不加括號很容易出錯。

帖出來和大家一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章