【问题标题】:In C++, if need to use a break statement, is 'while' loop preferred over 'for' loop?在 C++ 中,如果需要使用 break 语句,'while' 循环是否优于 'for' 循环?
【发布时间】:2016-11-02 03:48:18
【问题描述】:

我相信性能几乎相同。但是使用 while 循环来提高代码的可读性和/或可维护性有什么好处吗?

【问题讨论】:

  • 您可以尝试一个更具体的问题,并提供一个您如何使用两者的示例。这似乎是基于意见的。
  • for 循环是一种更通用的形式。 whilefor 的严格子集。
  • while 循环是所有循环结构的基础。如果你曾经实现过编译器,你会看到

标签: c++ loops for-loop while-loop break


【解决方案1】:

从技术上讲,forwhile 循环结构是可以互换的。任何可以用一个解决的问题,也可以用另一个解决。

但是,它们向代码的人类读者发送了不同的信息。

for 声明说“我们将按预定次数执行此操作”,而 while 声明说“我们不知道要多久执行一次。我们将执行此操作直到我们得到什么我们想要”。

【讨论】:

  • 感谢大家的cmets。好资料。这个答案最接近我正在寻找的答案。我会勾选这个作为答案。但是,我仍然希望看到一些实用的指南,例如,.. 在这些情况下选择“while”循环,在这些情况下选择“for”循环,而在所有其他情况下都无关紧要......,我可以在何时应用该指南我需要选择其中之一。一个例子是,如果有预定的最大迭代次数,但如果满足某些条件则想要退出。我应该使用带“break”的“for”循环,还是不带“break”的“while”循环?
  • 再一次,这个问题只是从可读性和/或可维护性的角度来看,正如我原来的问题中所指出的那样。谢谢。
【解决方案2】:

当您不知道容器的大小时,“While”很方便。例如,如果您需要遍历一个列表。

【讨论】:

  • 您可以为此使用 for 循环。 for(Node* n = head; n; n = n->next) {}.
  • @RetiredNinja ,是的,你是对的。我没想到。
  • 但是当大小未知或希望在进入循环之前检查某些内容时,通常使用 while 循环。 For 循环是基于计数的循环,因此通常确定大小。然而,这是按照惯例。
【解决方案3】:

请始终牢记,如果可能的话,您的代码应该一眼就能清楚地理解。在此基础上,我的个人意见是(按重要性降序排列):

  1. 如果break-ing 退出循环或在循环外使用循环计数器变量的内容,请务必对此写一点评论。
  2. 如果您在团队中编码,请尽量模仿他们的风格。了解是否有编码指南。
  3. 使用while(true){...if(...)break;...} 构建无限循环,因为与for(;;){...if(...)break;...}for(;true;){...if(...)break;...} 相比,它看起来更专业。
  4. 如果您意识到有关循环退出或递增计数器(或迭代器)的语句将被放置内部循环的主体 - 甚至可能多次 - 使用 while 以避免任何人略读在您的代码上将相信循环仅由其头部控制。考虑到您的代码的潜在读者可能不熟悉 cmets 的语言,因此代码必须自己说话。
  5. 在适当的时候使用基于 C++11 范围的 for 循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多