【发布时间】:2012-02-21 01:51:49
【问题描述】:
我对 Stackoverflow 进行了一些关于 C++ 中使用无符号整数而不是有符号整数的反向循环的研究。但我仍然不明白为什么会出现问题(请参阅Unsigned int reverse iteration with for loops)。为什么下面的代码会产生分段错误?
#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 何时将等于 0,因为存在类似溢出的情况。但我认为允许无符号整数取零值,不是吗?现在如果我用有符号整数替换它,绝对没有问题。
有人可以用无符号整数向我解释那个反向循环背后的机制吗?
非常感谢!
【问题讨论】:
-
i >= 0对于未签名的i始终为真,因此循环永远不会终止。 -
阅读编译器警告,它们很有用。在这种情况下,您的编译器可能应该警告您循环中的条件始终为真这一事实。
-
@dragonroot:不幸的是没有。我使用 g++ 的 -Wall 标志。您知道可以检测到此类问题的编译器标志吗?谢谢。
-
@dragonroot:我已经启用了这些警告,但编译器没有告诉我任何信息。
标签: c++ for-loop unsigned-integer