对于 Microsoft Visual Studio 2015 RC 中的以下函数,我收到两条关于比较有符号和无符号变量的警告。
uint64_t findMin(vector<uint64_t> &v)
{
uint64_t min = 0;
uint64_t s = v.size();
for (uint64_t i = 0; i < s; ++i) {
if (v[i] != 0) { // WARNING
min = v[i]; // WARNING
break;
}
}
...
}
警告是
warning C4244: 'argument': conversion from 'uint64_t' to 'unsigned int', possible loss of data
这很奇怪,因为至少我确定 min
和 v[i]
都有 uint64_t
变量,这是显而易见的。
这与RC版有关吗?还是背后有我不知道的事情?
最佳答案
编译器警告的“参数”是 v[i]
中 operator[]
的 i
参数(注意这是这两行中唯一的论点。
此operator[]
重载的参数是size_t
类型。在 32 位版本中,size_t
是一个 32 位无符号整数。将 64 位无符号 i
转换为 32 位无符号参数类型是收缩转换。
关于c++ - 从 'uint64_t' 到 'unsigned int' 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245586/