boost::exception 和 std::exception 之间的关系
Relationship between boost::exception and std::exception
假设有以下代码:
try {
// Do some boost stuff here
}
catch (const std::exception & stdEx) {
cout << stdEx.what() << endl;
}
问题:
1)我知道代码适用于某些提升异常,即使std::exception和boost::exception不在同一继承路径上。那为什么会起作用呢?
2)它是否适用于所有提升异常?换句话说,是否有可以触发低于 std::异常处理程序的 boost::exception 处理程序的示例?
正如你所说,boost::exception
不是从std::exception
派生出来的。出于原因,请查看相应的常见问题解答:
尽管在从基本异常类型派生时应使用虚拟继承,但通常异常类型(包括标准库中定义的异常类型)不会从虚拟
std::exception
派生。如果
boost::exception
派生自std::exception
,将enable_error_info
函数与这样的用户定义类型一起使用会引入危险的歧义,从而破坏所有catch(std::exception &)
语句。当然,
boost::exception
不应用于将std::exception
替换为异常类型层次结构中的基类型。相反,除了std::exception
之外,它还应该作为虚拟基础包含在内(可能也应该以虚拟方式派生)。
建议让特定的 boost 异常类(虚拟地)从 boost::exception
和 std::exception
派生,而不仅仅是从 boost::exception
派生。
一些 boost 库的异常仅来自std::exception
(如 boost::bad_lexical_cast
),一些来自两者(如boost::xpressive::regex_error
)。我不知道有哪一种只来自boost::exception
,所以我会说只捕捉std::exception
应该抓住所有。
- C++GTKMM gui循环依赖关系
- 为重写std::exception的库生成swig接口时出错
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 什么是 std::exception::what() 以及为什么要使用它?
- 链表"exception thrown"
- 为什么程序员同时使用 std::bad_alloc 和 std::exception.是否 std::例外 仅是不够的
- Doxygen - 如何在不生成图形的情况下生成文本调用关系结果
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 在 c++ 中对字符串进行操作的关系运算符无法按预期工作
- 如何记住这种递归关系?
- 如何在头文件中声明类模板(由于循环依赖关系)
- 移动语义和深层/浅层复制之间有什么关系?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 对在不同二进制文件中创建的对象文件的依赖关系
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- C++ broken_promise exception
- 模拟测试中类的依赖关系
- boost::exception 和 std::exception 之间的关系