在c ++中使用goto的合法理由

cal*_*pto 2 c++ syntax goto

可能重复:
GOTO被认为是无害的
GOTO仍然被认为是有害的?

有没有合理的理由goto在c ++程序中使用?我认识的每个人都说goto的定义是你编写错误的东西,我同意这一点,因为我找不到任何使用goto的理由

cni*_*tar 11

goto 是一种优雅+有效的方法来处理这个:

for (...) {
   for (...) {
      for (...) {
          /* detect condition that requires breaking all three loops */

      }
   }
}
out:
Run Code Online (Sandbox Code Playgroud)

另一个例子.假设你有一个巨大的功能 - 2K线.不要惊讶,很多网络代码都有这个.在函数中,您可以在不同的时间检测需要相同错误处理的条件:goto对此感到满意.

编辑下面的链接有部分原文反驳Dijkstra的文章.

" GOTO被认为有害的陈述"被视为有害

  • 您可以将所有代码放在单独的函数中,然后使用return.返回只能到(!)一个地方,所以我们不必查找标签. (3认同)
  • @cnicutar - 您认为编译器编写者在优化goto上花费了大量精力吗?当代码中有getos时,数据流分析要困难得多. (2认同)