【问题标题】:difference between while and do while loop in C++ [duplicate]C ++中while和do while循环之间的区别[重复]
【发布时间】:2016-04-01 00:34:59
【问题描述】:

谁能告诉我c++ 中的 while 循环和 do while 循环之间的基本区别(在效率方面)? 我试图通过网络搜索它,但找不到确切的答案。

【问题讨论】:

  • 我在这里没有看到重复。
  • 曾经有一个关于游艇的笑话“要问价格,你买不起”。在这种情况下:如果您必须询问效率差异,那么您将不会编写足够高效的代码来解决这个微小差异。我还是回答了。但是这个评论可能比那个答案提供更多信息。

标签: c++ loops


【解决方案1】:

在效率方面没有区别。两者都相当于条件评估和条件跳转。

【讨论】:

  • 是的,如果你想知道为什么他们有这两种方法,那是因为有些任务需要满足一个条件才能完成。例如,您想在尝试读取文件内容之前检查 eof(当然,除非您事先知道那里有多少条记录)。
  • 只有当优化器可以在编译时简单地评估第一个通过条件以将 while 转换为 do ... while 时,这才是正确的。否则,效率会略有不同。如果您正在处理一个执行次数很少的小循环,该循环嵌套在执行多次的循环中,那么效率差异可能很重要。这种情况很少见,但可能是问题的焦点。
  • @jsf:这个讨论不是很相关,因为循环具有不同的语义并且不仅仅是可互换的。我基本上是在评论“稳态”行为。这就是说,我看不出在实际情况下,通过一些编码扭曲将一种循环换成另一种循环是有利的,因为优化器无论如何都可能重组事物。
  • 该问题询问效率差异,这往往意味着忽略语义差异,这应该意味着人类可以推断出身体至少会被执行一次。那么这个问题只有在编译器不能做出同样的推论时才有趣。即便如此,它也只是在我在第一条评论中描述的情况下才有趣。在实际的软件工程中,我遇到过这种情况,并且在这种情况下有效地修复了其他人代码中的性能缺陷。
  • @jsf:我的回答没有使用你的假设。
【解决方案2】:

如果优化器不插入冗余代码,顶部检查循环会因为需要额外的跳转而变慢。如果优化器确实插入了冗余代码,由于冗余代码本身及其缓存影响,顶部检查循环将变得非常慢。

如果正确的行为是主体至少执行一次,则顶部检查循环的效率较低(比额外执行一次条件的成本更多)。但这通常仍然不是基于效率选择底部检查的理由。选择一个让人类维护者更容易理解代码的那个。

程序员习惯于查看while 循环(顶部检查循环),其中条件在第一遍时(从人类的角度来看)是微不足道的。循环仍然更具可读性顶部检查。如果第一遍是如此微不足道,以至于即使编译器也能看到它(发生的频率比您想象的要少),那么实际上没有效率差异。

通常,您要测试的条件甚至无法计算,直到通过循环一次。然后我发现底部检查循环更具可读性。对条件进行虚拟输入以检查微不足道的真实情况的常见做法只是分散注意力。

【讨论】:

    【解决方案3】:

    do while 循环确保循环体至少执行一次。

    这取决于你需要使用多少,我看到了一个很好的例子,说明你什么时候需要使用 do while 循环

    也许您已经编写了一个运行动画的图形程序。游戏结束时,您需要向您的玩家展示记分牌。当然,您需要至少运行一次动画循环才能渲染记分板。所以:在循环中运行你的动画,并在最后执行条件,看看你是否应该停止动画,因为游戏结束了。

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 1970-01-01
      • 2014-10-03
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2018-05-09
      • 1970-01-01
      相关资源
      最近更新 更多