C ++“catch(...)”参数

时间:2011-07-19 05:27:57

标签: c++ arguments

我最近在一些c ++代码中看到了一些有趣的东西:

try {
   //doStuff
} catch ( ... ) {
  //doStuff
}

“......”就是我指的。

现在,乍一看,人们可能会认为这只不过是一个填充物,就像我们看到的类似于“doStuff”的评论。奇怪的是,在Eclipse CDT中输入它实际上是有效的,没有给出任何语法错误。

这有什么特殊目的吗?

4 个答案:

答案 0 :(得分:6)

catch All 它会捕获任何类型的异常抛出 使用它时确保它放在所有捕获处理程序的末尾,否则它将捕获所有异常而不管其类型。

答案 1 :(得分:6)

正如其他人所提到的,它抓住了一切。从我所看到的,当你无法识别抛出的实际异常时,主要使用它。如果该异常是Structured Exception,而不是C ++异常,则可能会发生这种情况。例如,如果您尝试访问某些无效的内存位置。使用那些“全部捕获”通常不是一个好习惯。您没有(便携式)方式来获取堆栈跟踪,并且您对抛出的异常一无所知。

除了示例或非常微不足道的案例之外,使用它可能表明作者试图通过不对未识别的异常进行适当的处​​理来隐藏程序的不稳定性。如果您遇到过这样的情况,最好让程序崩溃,并创建一个可以在以后分析的崩溃转储。或者,使用structured exception handler(如果您使用VS - 不知道如何在其他编译器上完成此操作)。

答案 2 :(得分:3)

这是“捕获省略号”,意思是“捕获抛出的任何异常并在此处理它们”。与catch( SpecificType )不同,它只捕获某些类型的异常catch(...)将捕获所有C ++异常。

答案 3 :(得分:1)

如果有一些异常可以从try块返回,您可能不知道或者您不想专门处理,可以放置该代码。 它将捕获所有例外。