c++ - 难以理解的无限后向循环C++

标签 c++ for-loop

我是 C++ 的新手,我正在尝试实现一个向后的 for 循环,我找到了非常有效的解决方案,但我想知道我的版本不正确并导致无限循环。

这是我创建的一个工作版本(我不明白我们如何减少条件中的 i ..):

for (unsigned i = size ; i-- > 0 ; )
{
  // do stuff with i
}

这是我写的一个版本,它可以工作但不会下降到 0(这种方式对我来说似乎更合乎逻辑):

for (unsigned i = size-1 ; i > 0 ; i--)
{
  // do stuff with i
}

如果我说例如 n=10,如果我在循环中 print i 我会得到这个:

9
8
7
6
5
4
3
2
1

这里是对我来说更合乎逻辑的版本,应该下降到零,但提供了一个无限循环。

for (unsigned i = size-1 ; i >= 0 ; i--)
{
  // do stuff with i
}

有人可以向我解释为什么最后一个版本不起作用以及最佳选择是什么吗?

最佳答案

unsigned number 总是>= 0。(当它达到零时,进一步的减量将其设置为 std::numeric_limits<unsigned>::max() )

所以你的最终for循环等同于

for (unsigned i = size-1 ; true ; i--)

当然,它会永远循环。

在你的第一个循环中,你有 i-- > 0作为停止条件。当i为零,i--是一个值为零的表达式(因此循环停止),尽管i然后设置为 std::numeric_limits<unsigned>::max() .有些人喜欢(包括我;暗示反对票)写 i-->0并考虑-->作为幻灯片运算符(operator)。参见 What is the "-->" operator in C++?

关于c++ - 难以理解的无限后向循环C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37610220/

相关文章:

c++ - 复制构造函数问题李普曼

c++ - 用于类初始化的 SFML vector

python - 遍历列表的列表列表和元组列表

java - if else -if 意外消息

C# 在 Application.Run() 之后挂起并卡在 for 循环中

c++ - 有没有办法让模板根据参数是否是模板类型和值来执行特定的操作?

c++ - 无法使用 VS2012 链接到静态 boost 库,而动态链接工作正常

c++ - LNK2019 在多级类层次结构中具有纯虚拟赋值(=)运算符?

scala - 具有多个生成器的 for 循环如何在 Scala 中工作?

JavaScript JSON 组合和数据 Anylish