对于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版有关吗?或者背后有什么我不知道的事情?
答案 0 :(得分:4)
&#34;参数&#34;编译器警告的是i
中operator[]
的{{1}}参数(请注意,这是这两行中唯一的参数)。
此v[i]
重载的参数属于operator[]
类型。在32位构建中,size_t
是32位无符号整数。将64位无符号size_t
转换为32位无符号参数类型是一种缩小转换。