X86 架构 - 使用 unsigned long long 设置向量大小

X86 architecture - Set Vector size with unsigned long long

当我尝试在 x86 架构中使用 unsigned long long 设置矢量大小时,我看到以下错误:

unsigned long long sz;
vec.resize(sz);

error C4244: 'argument': conversion from 'unsigned __int64' to 'const unsigned int', possible loss of data

为什么会出现这个错误? x86 架构中 unsigned long long 的行为是什么? x86架构下如何设置unsigned long long值的向量大小?

像普通人一样使用 size_t sz,这是 arg 类型 std::vector::resize(size_t) 所期望的,所以使用相同的类型将意味着没有隐式转换,因此没有缩小。

unsigned long long是64位的类型,而size_t只是32位的,在32位代码中

您的 std::vector 不能大于 SIZE_MAX,因此使用更宽的整数类型毫无意义。这就是 MSVC 抱怨的全部内容。如果您实际上从未在 sz 中拥有巨大的价值,这不是错误,但您显然已经将 MSVC 设置得非常迂腐并将警告视为错误。

首先,这种隐式转换是不必要的;通过使用匹配类型来避免它。