catch(...)是否可以投掷;没有对象?

时间:2011-04-23 18:17:18

标签: c++ exception try-catch throw ellipsis

当堆栈中没有待处理的异常处理时,C ++标准会对下面的代码说什么呢?

try {
  throw;
} catch (...) {
  cerr << "Caught exception." << endl;
}

是否会抓住没有物体的投掷?

1 个答案:

答案 0 :(得分:12)

从2003 C ++标准§15.1[except.throw] / 8:

  

如果当前没有处理异常,则执行 throw-expression 而不使用操作数调用terminate()

因此,在您的示例中,由于当前没有处理任何异常,因此不会抛出任何异常,而是调用terminate()。由于terminate()未返回,因此永远不会输入您的catch块。