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
.
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是特定整数大小的值表示中的位数