[英]X86 architecture - Set Vector size with unsigned long long
當我嘗試在 x86 架構中使用 unsigned long long 設置向量大小時,我看到以下錯誤:
unsigned long long sz;
vec.resize(sz);
錯誤 C4244:“參數”:從“unsigned __int64”到“const unsigned int”的轉換,可能會丟失數據
為什么會出現這個錯誤? x86 架構中 unsigned long long 的行為是什么? 如何在 x86 架構中使用 unsigned long long 值設置向量大小?
像普通人一樣使用size_t sz
,這是std::vector::resize(size_t)
期望的 arg 類型,因此使用相同類型將意味着沒有隱式轉換,因此沒有縮小。
unsigned long long
是 64 位類型,但size_t
在 32 位代碼中僅為 32 位。
std::vector
大於SIZE_MAX
,因此使用更寬的整數類型毫無意義。 這就是 MSVC 所抱怨的。 如果您實際上從未在sz
擁有巨大的價值,這不是錯誤,但您顯然已將 MSVC 設置為真正迂腐並將警告視為錯誤。
這種隱式轉換首先是不必要的; 通過使用匹配類型來避免它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.