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)