2015-05-14 124 views
0

对于Microsoft Visual Studio 2015 RC中的以下函数,我收到了两个关于有符号和无符号变量比较的警告。从'uint64_t'转换为'unsigned int'

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版本有关吗?或者背后有什么我不知道的东西?

+0

你的常量应该有适当的后缀。文字0默认是带符号的int。 –

+0

推测size_t也是uint64_t?我认为这是索引... – JCx

回答

4

编译器警告的“参数”是operator[]i参数v[i](注意这是这两行中唯一的参数)。

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

+0

大概是“for(size_t i = 0; i JCx

+0

参数实际上是'size_type',通常与'size_t'相同,但不一定。 – Brian

+1

@JCx假设我们理解代码的意图,那么我们需要完全摆脱这个函数,并使用'std :: min_element' – Praetorian

相关问题