转换自' uint64_t' to' unsigned int'

时间:2015-05-14 19:20:27

标签: c++ visual-studio comparison

对于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版有关吗?或者背后有什么我不知道的事情?

1 个答案:

答案 0 :(得分:4)

&#34;参数&#34;编译器警告的是ioperator[]的{​​{1}}参数(请注意,这是这两行中唯一的参数)。

v[i]重载的参数属于operator[]类型。在32位构建中,size_t是32位无符号整数。将64位无符号size_t转换为32位无符号参数类型是一种缩小转换。