我正在编写一些看起来像这样的代码:
while(true) {
switch(msg->state) {
case MSGTYPE: // ...
break;
// ... more stuff ...
case DONE:
break; // **HERE, I want to break out of the loop itself**
}
}
有没有直接的方法可以做到这一点?
我知道我可以使用一个标志,并通过在切换后放置一个条件中断来中断循环。我只是想知道 C++ 是否已经有一些结构。
原文由 jrharshath 发布,翻译遵循 CC BY-SA 4.0 许可协议
前提
无论语言或所需功能如何,都应将以下代码视为错误格式:
支持论点
while( true )
循环的形式很差,因为它:while(true)
,那么当循环实际上没有终止条件时,我们就失去了简洁通信的能力。 (可以说,这已经发生了,所以这一点没有实际意义。)“转到”的替代方案
以下代码是更好的形式:
优点
没有旗帜。没有
goto
。没有例外。容易改变。易于阅读。易于修复。另外代码:第二点很重要。在不知道代码如何工作的情况下,如果有人让我让主循环让其他线程(或进程)有一些 CPU 时间,我会想到两个解决方案:
选项1
轻松插入暂停:
选项 #2
覆盖执行:
此代码比具有嵌入式
switch
的循环更简单(因此更易于阅读)。isValidState
方法应该只确定循环是否应该继续。该方法的主力应抽象为execute
方法,该方法允许子类覆盖默认行为(使用嵌入式switch
和goto
是一项艰巨的任务)64 .Python 示例
对比 StackOverflow 上发布的以下答案(针对 Python 问题):
代码
相对:
代码
在这里,
while True
会导致误导和过于复杂的代码。