我第一次尝试反向for循环 n次做的事情是这样的:
for ( unsigned int i = n-1; i >= 0; i-- ) {
...
}
Run Code Online (Sandbox Code Playgroud)
这是失败的,因为无符号算术 i
保证总是大于或等于零,因此循环条件将始终为真.幸运的是,在我不得不想知道为什么循环无限执行之前,gcc编译器警告我"无意义的比较".
我正在寻找一种解决这个问题的优雅方法,请记住:
有任何想法吗?谢谢 :)
我一直在讨论与同事一起使用size_t的问题.出现的一个问题是循环,它将循环变量递减直到达到零.
请考虑以下代码:
for (size_t i = n-1; i >= 0; --i) { ... }
Run Code Online (Sandbox Code Playgroud)
由于无符号整数环绕,这会导致无限循环.在这种情况下你做什么?编写上面的代码并没有意识到你犯了一个错误似乎很容易.
我们团队的两个建议是使用以下样式之一:
for (size_t i = n-1; i != -1 ; --i) { ... }
for (size_t i = n; i-- > 0 ; ) { ... }
Run Code Online (Sandbox Code Playgroud)
但我不知道还有其他选择......