如何優雅的解決size_t在x64下轉換到其他如int類型的警告?

拒絕用忽略警告的辦法

實際上,值並不會超過32位,但是在x64下編譯就會出現這個警告


static_cast&乃正解


你確信不會超過32位的值,就直接cast好了。並沒什麼特別處女座的辦法。

不建議寫#pragma關警告。一刀切的做法很可能會在你的代碼確實有問題的時候被編譯器放過。


強制類型轉換即可。

可以static_cast&(x),其實也可以(int)(x)。

另:雖然可能性很小,但是在一些極端情況下真的有可能出現超過的情況(值&>2G對於int就越了,對於動輒N個G的文件,幾十個上百個G的伺服器內存,很大么?)

而使用這種強制類型轉換,一旦發生了這種問題,那真的很難找bug。

所以,如果不是熱點數據和內存特別敏感的情況,與其用int,還不如一步到位就用size_t,不願意用unsigned就用intptr_t。

想多架構統一,直接int64_t,uint64_t。


我拒絕到處用優雅。


因為【int】本身就是計算機教育的誤區。

正確的做法是int32、int64之類的。


推薦閱讀:

TAG:C | Windows開發 | windows核心編程 |