在C掷当在catch块内执行时,将块内的当前捕获的异常重新抛出.
在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; } }
抛出一个指针或一个值没有任何区别,所以这是不成问题的.
如果ExceptionHandler()不是从catch块调用,会发生什么?
我用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
().