c++ - 从 'uint64_t' 到 'unsigned int' 的转换

标签 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版有关吗?还是背后有我不知道的事情?

最佳答案

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

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

关于c++ - 从 'uint64_t' 到 'unsigned int' 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245586/

相关文章:

c++ - 类成员在构造函数中和构造函数外的不同值

即使使用 ifndef,C++ 重定义错误

c++ - 我们如何插入实时可用的 mongocxx 文档?

visual-studio - 如何在 Visual Studio 中完全清理 bin 和 obj 文件夹?

visual-studio - 在 Windows 服务中使用 MFC?

c# - 为什么 String.Equals 不起作用?

android - String.replace 返回额外的引号

C++ boost 理性类,floor 函数

c++ - 在 C++ 中将字符串转换为 LPCWSTR

java - 比较来自两种不同类型的两个空对象