当我尝试在x86体系结构中使用unsigned long long设置矢量大小时,出现以下错误:
unsigned long long sz;
vec.resize(sz);
错误C4244:“参数”:从“无符号__int64”转换为“常量无符号int”,可能丢失数据
为什么会出现此错误?x86体系结构中unsigned long long的行为是什么?如何在x86体系结构中使用无符号的long long值设置矢量大小?
size_t sz
像普通人一样使用,这是arg类型所std::vector::resize(size_t)
期望的,因此使用相同类型将意味着没有隐式转换,因此也不会缩小范围。
unsigned long long
是size_t
32位代码中的64位类型,但只有32位。
不能std::vector
大于SIZE_MAX
,所以使用更宽的整数类型毫无意义。这就是MSVC所抱怨的全部。如果您实际上从未在中拥有巨大的价值sz
,这不是一个错误,但是您显然已经将MSVC设置为真正的书呆子,并将警告视为错误。
首先,这种隐式转换是不必要的。通过使用匹配类型避免它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句