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 设置得非常迂腐并将警告视为错误。
首先,这种隐式转换是不必要的;通过使用匹配类型来避免它。
当我尝试在 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 设置得非常迂腐并将警告视为错误。
首先,这种隐式转换是不必要的;通过使用匹配类型来避免它。