warning: implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'result_type' (aka 'int')

代码

vector<pair<int, int>> emptyCells;
uniform_int_distribution<> dis(0, emptyCells.size() - 1);

编译warning

warning: implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'result_type' (aka 'int')

因为 uniform_int_distribution<> 期望一个 int类型的范围,但是 emptyCells.size() - 1 返回的是 size_t(无符号长整型)类型。

size_t 转换为int 时,如果值超过 int 的范围(通常是 2147483647),可能会丢失精度或出现未定义行为。

问题原因:

  • vector::size() 返回 size_t(无符号类型)
  • uniform_int_distribution<> 默认使用 int 类型
  • 类型不匹配导致隐式转换

解决方案:显示转换为 int

uniform_int_distribution<> dis(0, static_cast<int>(emptyCells.size()) - 1);
posted @ 2025-12-08 20:38  归去来矣  阅读(0)  评论(0)    收藏  举报