抛出声明

时间:2014-08-24 14:10:30

标签: c++ exception throw

以下代码毫无意义。

void c() throw (XA) {
    throw XB();
    throw XA();
}

我指定函数c它应该抛出一个XA类但它仍然抛出一个XB并且XB被捕获在main中。函数声明旁边的“throw(XA)”有什么意义?

1 个答案:

答案 0 :(得分:0)

以下声明的目标不是忽略 XA以外的任何例外。

void c() throw (XA)

它将抛出XA个异常(或其派生类型),并为其他异常调用std::unexpected

  

如果此函数抛出X以外的某种类型的异常,则   函数调用std :: unexpected而不是查找处理程序或   调用std :: terminate。

有关详情read本和this。此外,不推荐在函数声明中使用异常规范。

因此,默认情况下,您的代码会调用std::unexpectedstd::terminate