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::unexpected
或std::terminate
。
说明一下;throw()
子句已被弃用,noexcept
子句取而代之。
在声明throw()
声明的情况下,随着时间的推移(实际代码)会慢慢地添加越来越多的作用域,直到它不值得,或者你永远不会抛出任何东西。
所以决定只支持这两个极端(也就是新的定义)
相关文章:
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- `throw 1` in C++
- gnuradio c++ connect self() throw bad_weak_ptr
- 为什么 c++ 使用 throw() 关键字来指示函数不会引发任何异常
- 是否有任何版本的C++(甚至是试行标准)是"throw()"并不意味着"cannot throw, ever"?
- 实现此"on error, throw"回调的最佳方法是什么?
- 是否有理由大多数/所有 try-catch 示例只对 throw 语句使用 void 子函数
- "structured bindings"与"decomposition declarations"
- throw() 函数应该总是在异常时展开堆栈并允许捕获异常还是必须调用 std::terminate ?
- GCC/GCOV 为 使用 throw() / noexexcept 函数生成的不同分支覆盖
- 级运算符 ( "C++ requires a type specifier for all declarations" )
- Poco::Net::HTTPClientSession throw exception without unique_
- 防止在将未引发的异常作为参数传递时在"throw e;"中切片
- 柯尼希查找和"C++ requires a type specifier for all declarations"
- 模板通过一个专门化同时接受throw和nothrow
- 是否可以从输入流中'throw away'读取值?
- std :: tr1 :: shared_ptr throw bad_alloc,也是一个好主意
- 我是否可以阻止throw调用malloc
- 尝试在 eclipse CDT 中提取函数时"Too many declarations in selection"错误消息
- Throw Declarations