这应该只是将 1 添加到 unsigned int:prev = nums[nextIndex + 1];
但它给出了一个警告说
算术溢出:对 4 字节值使用运算符“+”,然后将结果转换为 8 字节值。在调用运算符“+”之前将值转换为更广泛的类型以避免溢出
但我没有使用任何 8 字节值,它们都是 32 位整数......为什么它为我将东西转换成 8 字节值?
我在 LeetCode 上做一些问题,所以这里是我正在处理的问题的完整代码,只是旋转一个整数向量:
void rotate(std::vector<int>& nums, int k) {
k %= nums.size();
if (k > 0) {
unsigned int offsetCounter = 0;
int prev;
int next = nums[0];
for (unsigned int i = 0; i < nums.size(); i++) {
int f = k * i;
unsigned int nextIndex = ((unsigned int)((unsigned int)k * ((unsigned int)i + (unsigned int)1)) + (unsigned int)offsetCounter) % (unsigned int)nums.size();
if (nextIndex == offsetCounter) {
offsetCounter++;
prev = nums[nextIndex + 1];
}
else
{
prev = nums[nextIndex];
}
nums[nextIndex] = next;
next = prev;
}
}
}
nextIndex
也给出了相同的警告,唯一摆脱它的是将所有内容都转换为无符号整数。我不明白为什么当我绝对不使用 8 字节值时它说我使用的是 8 字节值。过去我忽略了这样的警告,但 LeetCode 非常重视它们。谢谢你。