在c ++中使用goto的正当理由[重复]

如何解决在c ++中使用goto的正当理由[重复]

||                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

        
goto
是处理此问题的一种优雅而有效的方法:
for (...) {
   for (...) {
      for (...) {
          /* detect condition that requires breaking all three loops */

      }
   }
}
out:
另一个例子。假设您有一个强大的功能-2K线。不用惊讶,很多网络代码都带有此功能。并且在函数中,在不同的时间,您会检测到需要相同错误处理的条件:
goto
亮起。 编辑下面的链接,其中包含与Dijkstra的文章相反的原始文章的一部分。 “
GOTO
陈述被认为有害”被认为有害     ,        当您需要突破一个深层嵌套的循环时。假设您要在3维矩阵中搜索值:
for( size_t i = 0; i != d0; ++i )
for( size_t j = 0; j != d1; ++j )
for( size_t k = 0; k != d2; ++k )
  if( m[i][j][k] == key )
  {
    // break out
  }
当然,您总是可以定义一个函数,然后定义一个
return
,但是您可能有一次用例,其中写一个函数(因此将代码移出上下文,携带所有变量,等等)是不值得的。只是为了避免使用
goto
的麻烦。     ,        您可以使用
goto
进行清理,例如:
void doSomething()
{
    if (someCondition)
        goto cleanUPA;
    if (otherCondition)
        goto cleanUPB;
    if (oneMoreCondition)
        goto cleanUPAll;

    //All good then just
    return;

cleanupUPB:
    //respective cleanups
cleanupUPA:
    //respective cleanups
cleanUPALL:
    //respective cleanups
}
可能可以通过在C ++中使用RAII来实现更好的方式,但是通常来自C背景,因此通常使用
goto
,因此,由于某种原因,您不能使用RAII(我认为很难找到这种情况,也许您是根本不使用任何智能指针等),这可能是合法的情况。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?