我对C++中使用无符号整数而不是有符号整数的循环进行了反转的Stackoverflow做了一些研究。但我仍然不明白为什么会出现问题(请参阅Unsigned int reverse iteration with for loops)。为什么下面的代码会产生分段错误?C++ for循环中的无符号整数
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<double> x(10);
for (unsigned int i = 9; i >= 0; i--)
{
cout << "i= " << i << endl;
x[i] = 1.0;
}
cout << "x0= " << x[0] << endl;
return 0;
}
我知道问题是当索引i等于零,因为有像溢出一样的东西。但我认为一个无符号整数可以取零值,不是吗?现在,如果我用有符号整数替换它,那绝对没有问题。
有人可以解释我背后的反向循环与无符号整数的机制?
非常感谢!
对于无符号'i','i> = 0'总是如此,所以循环永远不会终止。 – TonyK 2012-01-28 08:58:35
阅读编译器警告,它们很有用。在这种情况下,您的编译器应该已经警告过您,循环中的条件始终为真。 – dragonroot 2012-01-28 09:20:05
@dragonroot:不幸的不是。我使用g ++的-Wall标志。你知道一个编译器标志可以检测到这种问题吗?谢谢。 – Benjamin 2012-01-28 09:27:44