带for循环的无符号int反向迭代

dec*_*iar 42 c++ iteration loops for-loop overflow

我希望for循环中的iterator变量将迭代反转为0 unsigned int,我想不出类似的比较i > -1,就像你想做的那样signed int.

for (unsigned int i = 10; i <= 10; --i) { ... }
Run Code Online (Sandbox Code Playgroud)

但这似乎很不清楚,因为它依赖于无符号整数的数值溢出超过10.

也许我只是没有一个清醒的头脑,但是有什么更好的方法来做到这一点......

免责声明:这只是一个简单的用例,10的上限是微不足道的,它可以是任何东西,而且i必须是一个unsigned int.

Ser*_*ich 37

您可以使用

for (unsigned int j = n; j-- > 0; ) {}
Run Code Online (Sandbox Code Playgroud)

它从n-1下到下迭代0.

  • 我现在不记得确切,但是我认为,如果必须将步长减小&gt; 1,则很难遵循这种模式。 (2认同)

Ale*_* C. 21

以下是您想要的:

for (unsigned i = 10; i != static_cast<unsigned>(-1); --i)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这是完美的定义,实际上是有效的.有符号类型的算法由标准准确定义.确实:

4.7/2(关于铸造到无符号类型):

如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模2 ^ n,其中n是用于表示无符号类型的位数)

3.9.1/4

声明无符号的无符号整数应遵守算术模2 ^ n的定律,其中n是特定整数大小的值表示中的位数

  • @Daniel:如果转换不存在,`i`将被提升为int并且行为未定义.你*要*施放-1.所以我的帖子不正确. (3认同)