“错误定义的 for 循环 - 循环无限执行”(MSVC C6295)

use*_*862 2 c++ visual-studio

我不太清楚为什么 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)
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下吗?

编辑: GetCount() 返回一个无符号整数,我无法控制它

cig*_*ien 7

当你从一个类型中减去 0 时unsigned,你得到的不是一个负数,而是一个非常大的正数。

这意味着这个条件:

i >= 0
Run Code Online (Sandbox Code Playgroud)

永远为真,导致无限循环。

您可以通过执行以下操作来解决此问题:

for (int i = static_cast<int>(list->GetCount()) - 1; i >= 0; i--)
Run Code Online (Sandbox Code Playgroud)

请注意,转换需要在减 1之前完成,否则当GetCount返回 0 时,您将遇到相同的换行问题。