从 'uint64_t' 转换为 'unsigned int'

conversion from 'uint64_t' to 'unsigned int'

对于 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

这很奇怪,因为至少我确定 minv[i] 都有 uint64_t 变量,这是显而易见的。

这与RC版有关吗?或者背后有什么我不知道的?

编译器警告的 "argument" 是 v[i]operator[]i 参数(请注意,这是这两行中唯一的参数).

operator[] 重载的参数类型为 size_t。在 32 位版本中 size_t 是一个 32 位无符号整数。将 64 位无符号 i 转换为 32 位无符号参数类型是收缩转换。