C++ 从';uint64';至';无符号整数';
对于Microsoft Visual Studio 2015 RC中的以下函数,我收到两条关于比较有符号变量和无符号变量的警告C++ 从';uint64';至';无符号整数';,c++,visual-studio,comparison,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
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;
}
}
...
}
这很奇怪,因为至少我确信min
和v[I]
都有uint64\u t
变量,这是显而易见的
这和RC版有关吗?或者在这背后有我不知道的东西?编译器警告的“参数”是v[I]
中operator[]
的I
参数(请注意,这是这两行中唯一的参数)
此运算符[]
重载的参数类型为size\u t
。在32位构建中,size\u t是32位无符号整数。将64位无符号i
转换为32位无符号参数类型是一种缩小转换。编译器警告的“参数”是v[i]
中运算符[]
的i
参数(请注意,这是这两行中唯一的参数)
此
运算符[]
重载的参数类型为size\u t
。在32位构建中,size\u t是32位无符号整数。将64位无符号i
转换为32位无符号参数类型是一种狭义转换。您的常量应具有适当的后缀。默认情况下,文本0是带符号的int。大概size\u t也是uint64\u t?我想这是索引…你的常数应该有适当的后缀。默认情况下,文本0是带符号的int。大概size\u t也是uint64\u t?我在想这是一个索引…大概“for(size_t I=0;Isize\u type
,这通常与size\u t
相同,但不一定如此。@JCx假设我们理解代码的意图,那么方法是完全摆脱函数,使用std::min\u元素“for(size_t i=0;isize\u type
,它通常与size\u t
相同,但不一定如此。@JCx假设我们理解代码的意图,那么方法是完全去掉函数并使用std::min\u元素
是的,我将构建类型更改为X64
warning C4244: 'argument': conversion from 'uint64_t' to 'unsigned int', possible loss of data