C++中while循环与while循环的区别 有谁能告诉我C++中while循环和do while循环之间的基本区别吗? 我试着在网上搜索,但找不到确切的答案。

C++中while循环与while循环的区别 有谁能告诉我C++中while循环和do while循环之间的基本区别吗? 我试着在网上搜索,但找不到确切的答案。,c++,loops,C++,Loops,效率上没有差别。两者都相当于一个条件求值和一个条件跳转。do while循环确保循环体至少执行一次 这取决于您需要使用它的程度,我看到了一个很好的示例,说明了何时需要使用do while循环 也许您已经编写了一个运行动画的图形程序。当比赛结束时,你需要向你的球员展示记分牌。当然,您需要至少运行一次动画循环才能渲染记分板。因此:在循环中运行动画,并在结束时执行条件设置,以查看是否应该因为游戏结束而停止动画制作 如果优化器不插入冗余代码,则由于需要额外的跳转,顶部检查循环会变慢。如果优化器确实插入了

效率上没有差别。两者都相当于一个条件求值和一个条件跳转。

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

这取决于您需要使用它的程度,我看到了一个很好的示例,说明了何时需要使用do while循环

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


如果优化器不插入冗余代码,则由于需要额外的跳转,顶部检查循环会变慢。如果优化器确实插入了冗余代码,那么由于冗余代码本身及其缓存影响,顶部检查循环的速度会稍微慢一些

如果正确的行为是主体至少执行一次,那么top checked循环的效率低于额外执行一次条件的成本。但这通常不是基于效率选择底部检查的理由。选择一个能使代码更容易被人工维护人员理解的代码

程序员习惯于查看while循环和top-checked循环,在这些循环中,从人的角度来看,条件在第一次通过时非常真实。循环的可读性更高。如果第一个过程是如此微不足道的真实,以至于编译器看到它发生的频率比您可能猜到的要少,那么实际上没有效率差异


通常情况下,要测试的条件甚至要经过一次循环才能计算出来。然后我发现底部检查的循环更可读。通常的做法是对条件进行虚拟输入,以便对一些琐碎的事实进行顶层检查,这只会让人分心。

是的,如果你想知道为什么这两种方法都有,那是因为有些任务需要满足条件才能完成。例如,在尝试读取文件内容之前,您可能希望检查eof,除非您事先知道有多少条记录。只有当优化器可以在编译时简单地计算first pass条件以转换为do时,这才是正确的。。。虽然否则,效率会略有不同。如果您处理的是一个执行次数非常少的微小循环,而该循环嵌套在执行次数非常多的循环中,那么效率差异可能很重要。这种情况很少见,但可能是问题的焦点。@jsf:这个讨论不太相关,因为循环具有不同的语义,并且不只是可互换的。我基本上是在评论稳态行为。也就是说,我看不出在实际情况下,通过一些编码扭曲来交换一种类型的循环会有什么好处,因为优化器可能会重新构造东西。问题是效率差异,这意味着忽略语义差异,这应该意味着,人类可以推断,无论哪种方式,尸体至少会被处死一次。那么,只有当编译器不能做出同样的推断时,这个问题才有意思。即便如此,这也只是我在第一次评论中所描述的案例中的有趣之处。在真正的软件工程中,我遇到过这种情况,并在这种情况下有效地修复了其他人代码中的性能缺陷。@jsf:我的回答没有使用你的假设。我在这里没有看到重复的。过去有一个关于游艇的笑话,如果你要问价格,你负担不起。在这种情况下:如果你不得不问效率的差异,你就不会写出足够有效的代码来解决这个微小的差异。我还是回答了。但这一评论可能比答案更能说明问题。