现在大多数人不在他们的代码中使用
goto
语句。好的。在 SO 中,有很多关于 goto
使用的线程,所有这些线程都“允许”它退出深度循环。
展示一些:
我查看了cppreference.com,其中告诉:
当无法将控制权转移给 使用其他语句所需的位置。
让我警觉的是“否则不可能”
任何机构都可以举例说明无法避免
goto
的情况吗?
注意:我将这个问题标记为“C++”,只是因为我对 C++ 示例更感兴趣。任何其他语言都对我有好处。
首先,已经证明(就像数学证明一样),任何你能用 goto 做的事情,你也可以不用它们做。但在某些情况下,您最终会得到重复的代码,或更复杂的控制结构。
但是这个句子只是谈论将控制转移到其他控制结构无法转移的地方。主要的例子是将控制转移到循环体中。例如,考虑打印一些用逗号分隔的数字(或字符串等)的相当常见的要求,因此我们在项目之间有逗号,但不在第一个之前或最后一个之后。一种方法是这样的:
goto start;
while (i < n) {
print(',');
start:
print(input[i++]);
}
这样我们就可以在除第一个项目之外的每个项目之前打印出一个分隔符。显然还有其他方法可以完成相同的基本工作,但在这里我将重点关注“传输控制”部分。我们将控制从循环外部转移到循环体的中间。唯一允许我们直接执行此操作的控制结构是goto
。