编写没有正文的循环的最佳方法是什么

时间:2012-04-10 22:12:00

标签: c++

我有一个函数func,它返回truefalse。在func返回false之前,我想继续调用它。这样做最不方便的方法是什么?

do {
  // do nothing
} while (func());

或..

while (func());

或..

while (func())
  if (!func())
    break;

所有这些看起来都很尴尬,对我不直观。还有另一个解决方案吗?

4 个答案:

答案 0 :(得分:8)

我认为选项B是最常用的,但你应该更明显地说你有一个空的循环体:

while (func())
  ; // do nothing

while (func())  { /* do nothing */ }

作为旁注,这个看起来就像某种忙碌的等待。如果是这种情况,通常可以通过使用OS提供的同步原语来避免它。

答案 1 :(得分:8)

我曾经写过

while (func()) continue;

当我需要一个完整的忙等待循环时(不常见)。关键字使得很难错过意图,并且它被编译掉了。 :)

答案 2 :(得分:1)

选项B的变体:

while (func())
{
    // no-op
}

答案 3 :(得分:0)

第三个做了不同的事情 - 每次迭代都会调用func两次。

我猜你想要第二个,这对其他人来说并不是很困惑。