我不太确定为什么Visual Studio会给我错误消息“错误定义的for循环:“unsigned int”值的范围始终为“0”到“4294967295”。循环无限执行”的代码:
for (unsigned int i = list->GetCount() - 1; i >= 0; i--)
{
// do stuff to each item (specifically in reverse order)
}
有人能给我解释一下吗
Edit:GetCount()返回一个unsigned int,我对此没有控制权
3条答案
按热度按时间00jrzges1#
当你从
unsigned
类型中减去0时,你得到的不是负数,而是一个非常大的正数。这意味着这个条件:
将始终为真,导致无限循环。
您可以通过执行以下操作来解决此问题:
请注意,强制转换需要在减去1之前 * 完成,否则当
GetCount
返回0时,您将遇到相同的 Package 问题。bwleehnv2#
你犯了一个常见的错误。当你声明
i
为unsigned int
时,你保证它永远不会为负;相反,每当它低于0
时,它将“回绕”到一个极高的数字。这意味着你的for循环永远不会终止!您的终止条件
i >= 0
将 * 永远不会 * 满足,因为无符号整数将倒数2,1,0,4294967295,4294967294...以此类推要解决此问题,请将
unsigned int
类型更改为int
类型。i86rm4rw3#
you're循环的执行永远不会结束。
有几个解决方案,我喜欢前两个。第三个将导致list->GetCount()被调用n次。
int i = list->getCount()- 1; i!= UINT_MAX;--i);
int i = list->getCount()- 1; i!=(unsigned int)-1;--i);
int i = list->getCount()- 1; i <= list->GetCount()- 1;--i);
你也可以转换为int,但是你必须确定list->GetCount()将小于或等于INT_MAX。