Throw Declarations

Throw Declarations

本文关键字:Declarations Throw      更新时间:2023-10-16

下面的代码没有意义。

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

我指定函数c应该抛出一个XA类,但它仍然抛出一个XB,并且XB在主程序中被捕获。在函数声明旁边的"抛出(XA)"的点是什么?

下面声明的目的不是忽略XA以外的任何异常。

void c() throw (XA)

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

如果该函数抛出非X类型的异常,则函数调用std::unexpected而不是查找处理程序或调用std::终止。

要了解更多信息,请阅读这个和这个。此外,不赞成在函数声明中使用异常说明。

因此,您的代码将默认调用std::unexpectedstd::terminate

说明一下;throw()子句已被弃用,noexcept子句取而代之。

在声明throw()声明的情况下,随着时间的推移(实际代码)会慢慢地添加越来越多的作用域,直到它不值得,或者你永远不会抛出任何东西。

所以决定只支持这两个极端(也就是新的定义)