当堆栈中没有待处理的异常处理时,C ++标准会对下面的代码说什么呢?
try {
throw;
} catch (...) {
cerr << "Caught exception." << endl;
}
是否会抓住没有物体的投掷?
答案 0 :(得分:12)
从2003 C ++标准§15.1[except.throw] / 8:
如果当前没有处理异常,则执行 throw-expression 而不使用操作数调用
terminate()
。
因此,在您的示例中,由于当前没有处理任何异常,因此不会抛出任何异常,而是调用terminate()
。由于terminate()
未返回,因此永远不会输入您的catch
块。