【发布时间】:2014-04-23 13:57:11
【问题描述】:
自从我开始编程以来,我被教导如果可以避免的话,永远不要使用“goto”。然而,我遇到了一个案例,我认为 goto 是保持代码干净的最简单方法。
我的代码类似于以下示例:
// code within a for-loop
// ...
// ...
try{
if(!ifstream.open())
throw special_exception;
A_EXCEPTION_HANDLED:
//...
//...
}
catch(special_exception ex)
{
// trying to fix the error here
if(error_is_fixed)
goto A_EXCEPTION_HANDLED;
// else clean up and show error message
};
这个例子在一个嵌套循环中,我需要确保 throw 之后的代码被正确执行,所以我必须编写大量的开销来启动迭代,其中再次抛出异常。 这种情况会被认为是合理使用 goto 还是像跳出循环等一样糟糕?
【问题讨论】:
-
为什么“尝试修复错误”部分不能进入
if(!ifstream.open())的正文?throw如果修复失败,否则继续正常控制流。 -
使用
goto跳转到后向标签通常是一种不好的风格(更不用说你应该避免它)。 -
我猜你需要躺下再看问题。这里不需要
goto。
标签: c++ exception exception-handling goto