簡體   English   中英

X86 架構 - 使用 unsigned long long 設置向量大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM