[英]How to avoid problems with size_t and int types in 64bit C++ builds?
[英]How to avoid size_t to int casting warnings when porting to 64 bit?
我必須將非常大的C ++傳統代碼庫轉換為64位。 我設法獲得了要編譯的基本模塊之一,但是即使在這個小模塊中,我也會收到800條警告:
warning C4267: = conversion from size_t to int, possible loss of data
我知道為什么會出現這些,但是要擺脫它們我有什么選擇? 有沒有什么系統的方法可以避免碰到每個實例?
一種選擇是禁用“數據丟失”警告。 為了限制禁用警告的效果,MS Visual Studio具有push
和pop
指令:
#pragma warning(push)
#pragma warning(disable: 4267)
// legacy code
#pragma warning(pop)
// normal code
這些#pragma
偽指令特定於Visual Studio; 您可能想用#ifdef _MSC_VER
來包裝它們。
這是思想。 我敢肯定,這些警告中的+ 90%可以忽略。 我有類似的問題,並且對以下內容有很多警告:
sumeType tab[10];
int items = std::size(tab);
// or
functionWhichExeptsInt(std::size(tab))
在上面的示例中,由於std::size
是constexpr
編譯器可以檢測到size值足夠小以適合int
因此它不應報告warring,但可以。
問題是,在某些情況下此警告可以檢測到實際問題。 因此,禁用此警告不是一個好方法。
在我的項目中,我們決定繼續交戰,但不要將其視為錯誤:
這更像是精神問題:“我現在可以忽略那些+100的警告嗎?”。 我也喜歡沒有警告的代碼,但有時最好與它們一起生活。
IMO這是一種更安全的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.