确实抛出C++函数声明排除了抛出其他异常
does throw in a C++ function declaration preclude throwing other exceptions?
我继承了一个C++项目,其函数定义如下:
void myDoc::parseDoc(string& path) throw(docError);
parseDoc
函数调用抛出libError
的库,调用parseDoc
的主函数捕获docError
和libError
并记录它们。 parseDoc
本身不会抛出任何异常,但我本以为库中的libError
仍然会被main
捕获。 他们没有 - 我只是得到一个核心转储,堆栈上没有任何有用的东西。
我尝试了对parseDoc
进行各种更改。他们中的一些人libError
被传递到链条上。有些没有:
- 抓住
libError
并重新扔掉它 - 不起作用 - 抓住
libError
并将其复制到docError
并扔掉它 - 有效 - 指定
throw(docError, libError)
并且不捕获任何内容 - 有效 - 从函数定义中删除
throw()
并且不捕获任何内容 - 有效
所以我的问题是 - 向此函数定义添加throw(docError)
是否专门防止其他异常从堆栈传递给调用方? 如果是这样,为什么有人想这样做? 如果不指定函数抛出异常只是按照我一直认为异常应该工作的方式工作,那么 throw(e)
规范首先有什么意义?
是的,抛出规范不允许除指定转义函数之外的任何异常。
至于为什么有人想要这个,这个想法是文档,准确显示函数将引发哪些异常。
然而,实际上,这个概念被证明是如此无用,以至于抛掷规范实际上在较新版本的C++中删除了(或将要,不确定确切的状态)。因此,要采取的正确操作是第 4 项,即删除规范。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 从构造函数抛出异常时如何克服内存泄漏
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在 C++ 中使用递归填充 D2 数组,有时工作正常,其他时会引发异常
- 如果从在其他函数中调用的函数引发异常会发生什么情况
- Catch2 迫使我在异常中添加对 std::string 的强制转换,这会产生其他问题吗?
- 助推.测试崩溃,***异常:MSVC上的其他
- 在 C++ 的异常层次结构中引入其他基类型
- 受其他异常影响的异常的生命周期
- 捕获多种类型的其他异常的异常类
- 捕获 Segfault 或任何其他错误/异常/信号C++例如在 Java 中捕获异常
- 确实抛出C++函数声明排除了抛出其他异常
- 锁定boost::unique_lock时抛出的异常,该锁已经锁定在其他线程中