在 C++ 中,throw;
在 catch block 内执行时会将当前捕获的异常重新抛出 block 外。
在 this answer当经常使用复杂的异常处理时,异常调度器的想法被提出来作为减少代码重复的解决方案:
try {
CodeThatMightThrow();
} catch(...) {
ExceptionHandler();
}
void ExceptionHandler()
{
try {
throw;
} catch( FileException* e ) {
//do handling with some complex logic
delete e;
} catch( GenericException* e ) {
//do handling with other complex logic
delete e;
}
}
抛出一个指针或一个值没有任何区别,所以这是不可能的。
如果不是从 catch block 调用 ExceptionHandler() 会发生什么?
我用 VC7 试过这段代码:
int main( int, char** )
{
try {
throw;
} catch( ... ) {
MessageBox( 0, "", "", 0 );
}
return 0;
}
首先它使调试器指示第一次机会异常,然后立即指示未处理的异常。如果我在调试器之外运行此代码,程序崩溃的方式与调用 abort() 的方式相同。
这种情况下的预期行为是什么?
最佳答案
来自标准,15.1/8
If no exception is presently being handled, executing a throw-expression with no operand calls
std::terminate
().
关于c++ - 如果 throw 会发生什么;语句在 catch block 之外执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/981400/