Rip*_*pi2 3 c++ language-agnostic goto
现在大多数人不在goto他们的代码中使用语句。好的。在 SO 中,有许多线程在goto使用,所有线程都“允许”它退出深度循环。
展示一些:
我查看了cppreference.com,其中显示:
当无法使用其他语句将控制转移到所需位置时使用。
敲响我警钟的是“否则不可能”
goto任何机构都可以举出一些无法避免的例子吗?
注意:我将此问题标记为“C++”,只是因为我对 C++ 示例更感兴趣。任何其他语言对我都有好处。
Jer*_*fin 12
首先,已经证明(就像数学证明一样),任何你可以用 goto 做的事情,你也可以不用它们做。但在某些情况下,您最终会得到重复的代码或更复杂的控制结构。
但该句子仅讨论将控制权转移到其他控制结构无法转移的地方。主要的例子是将控制转移到循环体中。例如,考虑打印一些用逗号分隔的数字(或字符串等)的相当常见的要求,因此我们在项目之间有逗号,但不在第一个之前或最后一个之后。一种方法是这样的:
goto start;
while (i < n) {
print(',');
start:
print(input[i++]);
}
Run Code Online (Sandbox Code Playgroud)
像这样将控制权直接转移到循环体中间的唯一方法是goto. 唯一的替代方案是根本不将控制转移到循环体的中间。你当然可以这样做:
bool first = true;
while (i < n) {
if (!first) {
print(',');
}
first = false;
print(input[i++]);
}
Run Code Online (Sandbox Code Playgroud)
当然还有其他可能性。但对于将控制转移到循环体中间的特定要求,goto这是唯一有效的方法。
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |