我最近在一些c ++代码中看到了一些有趣的东西:
try {
//doStuff
} catch ( ... ) {
//doStuff
}
“......”就是我指的。
现在,乍一看,人们可能会认为这只不过是一个填充物,就像我们看到的类似于“doStuff”的评论。奇怪的是,在Eclipse CDT中输入它实际上是有效的,没有给出任何语法错误。
这有什么特殊目的吗?
答案 0 :(得分:6)
catch All 它会捕获任何类型的异常抛出 使用它时确保它放在所有捕获处理程序的末尾,否则它将捕获所有异常而不管其类型。
答案 1 :(得分:6)
正如其他人所提到的,它抓住了一切。从我所看到的,当你无法识别抛出的实际异常时,主要使用它。如果该异常是Structured Exception,而不是C ++异常,则可能会发生这种情况。例如,如果您尝试访问某些无效的内存位置。使用那些“全部捕获”通常不是一个好习惯。您没有(便携式)方式来获取堆栈跟踪,并且您对抛出的异常一无所知。
除了示例或非常微不足道的案例之外,使用它可能表明作者试图通过不对未识别的异常进行适当的处理来隐藏程序的不稳定性。如果您遇到过这样的情况,最好让程序崩溃,并创建一个可以在以后分析的崩溃转储。或者,使用structured exception handler(如果您使用VS - 不知道如何在其他编译器上完成此操作)。
答案 2 :(得分:3)
这是“捕获省略号”,意思是“捕获抛出的任何异常并在此处理它们”。与catch( SpecificType )
不同,它只捕获某些类型的异常catch(...)
将捕获所有C ++异常。
答案 3 :(得分:1)
如果有一些异常可以从try块返回,您可能不知道或者您不想专门处理,可以放置该代码。 它将捕获所有例外。