很少循环出错

时间:2016-07-06 22:42:08

标签: c++ c++11

我在i = 2L = 0的循环很少。在i达到零后,我找到i == 18446744073709551615并且我的循环无限期地继续。

int L = 0;
size_t i = 2;

while (i >= L) {
  // do some work here
  i--;
}

为什么这个循环不会终止?

2 个答案:

答案 0 :(得分:4)

您完全不清楚您的示例中使用的类型,但是我们可能会假设您实际拥有的行为:

int L = 0;
size_t i = 2;

和循环条件

while (i >= L)

在使用i操作的i--下溢时失败。

这意味着您之后会18446744073709551615中的i值,这肯定大于0L)。

unsigned值永远不会小于0,并且您的编译器应该向您吐出一个关于该事实的警告(取决于内置的SCA功能)。

答案 1 :(得分:2)

看起来i是无符号整数,因此总是大于或等于零。