C++ 编写无主体循环的最佳方法是什么
我有一个函数C++ 编写无主体循环的最佳方法是什么,c++,C++,我有一个函数func,它返回true或false。在func返回false之前,我想继续调用它。做这件事最不尴尬的方式是什么 do { // do nothing } while (func()); 或者 或者 在我看来,所有这些都很尴尬和不直观。还有其他解决方案吗?我认为选项B是最常用的,但您应该更清楚地看到,您有一个空的循环体: while (func()) ; // do nothing 或 作为旁注,这看起来像是在忙着等待。如果是这种情况,通常可以并且应该通过使用操作系统提供
func
,它返回true
或false
。在func
返回false
之前,我想继续调用它。做这件事最不尴尬的方式是什么
do {
// do nothing
} while (func());
或者
或者
在我看来,所有这些都很尴尬和不直观。还有其他解决方案吗?我认为选项B是最常用的,但您应该更清楚地看到,您有一个空的循环体:
while (func())
; // do nothing
或
作为旁注,这看起来像是在忙着等待。如果是这种情况,通常可以并且应该通过使用操作系统提供的同步原语来避免这种情况。第三种方法会做一些不同的事情-它将在每次迭代中调用
func
两次
我猜你想要第二个,这对其他人来说一点也不混乱。选项B的变体:
while (func())
{
// no-op
}
我过去常写信
while (func()) continue;
当我需要一个完整的忙等待循环(这不是很常见)。关键字使人很难忽略其意图,因此它被编译掉了。:) 正是我要说的。很高兴我恢复了精神。我更喜欢用牙套来表示什么都不做,但除此之外100%同意。@Stiles:是的,这也很常见。将其添加到答案中。忙着等待,不要假设OP在关心微控制器的操作系统上运行此代码。如果代码确实在抢占式多任务机上运行,那么sleep()循环几乎是一个坏主意。OS开发人员花了很长时间设计、开发、测试和交付大量的同步机制——如果可能的话,应该使用这些机制,而不是蹩脚的轮询循环。@MartinJames:再说一遍,也许这根本不是一个繁忙的等待。它可能是一个做了大量工作的函数,在返回
false
之前,必须调用未知次数的函数。第一个和第二个函数是等价的。第三个循环调用它两次,我怀疑他的意思是,而(1)if(!func())break代码>@Ben:第三个也是等效的,但它不是很明显:)@NiklasB.:有点像。它的展开系数为2,因此性能可能会略有不同。+1。我从来没有想过,我总是在下一行使用单独的分号(见Niklas的答案),但我想我以后会使用它。这是最干净、最具描述性的方法。
while (func()) { /* do nothing */ }
while (func())
{
// no-op
}
while (func()) continue;