C++ 抛出声明

C++ 抛出声明,c++,exception,throw,C++,Exception,Throw,下面的代码毫无意义 void c() throw (XA) { throw XB(); throw XA(); } 我向函数c指定它应该抛出一个XA类,但它仍然抛出一个XB,并且XB被捕获在主类中。在函数声明旁边抛出XA有什么意义?下面声明的目标是不忽略XA以外的任何异常 它将抛出XA异常或其派生类型,并为其他异常调用std::unexpected 如果此函数引发X以外的某种类型的异常,则 函数调用std::意外,而不是查找处理程序或 调用std::终止 有关更多信息,请参阅此

下面的代码毫无意义

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

我向函数c指定它应该抛出一个XA类,但它仍然抛出一个XB,并且XB被捕获在主类中。在函数声明旁边抛出XA有什么意义?

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

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

如果此函数引发X以外的某种类型的异常,则 函数调用std::意外,而不是查找处理程序或 调用std::终止

有关更多信息,请参阅此和。此外,不推荐在函数声明中使用异常规范


因此,默认情况下,您的代码将调用std::unexpected或std::terminate。

您是否在使用MSVC?它从未按照标准实施异常规范。它忽略了除抛出一个空的Expption规范之外的所有Expption规范,并为后者提供了一个类似于C++11的noexcept的非标准含义。应该发生的是,throw XB将导致调用意外,并最终终止和中止。请参阅a.不使用异常规范的基本原理:
void c() throw (XA)