std::nested_exception

来自cppreference.com
< cpp‎ | error
在标头 <exception> 定义
class nested_exception;
(C++11 起)

std::nested_exception 是一个多态混入类,可以捕获并存储当前异常,令任意类型的异常彼此间内嵌变得可行。

std::nested_exception 的成员函数均为 constexpr

(C++26 起)

目录

[编辑]成员函数

构造 nested_exception
(公开成员函数)
析构 nested exception
(虚公开成员函数)
替换 nested_exception 的内容
(公开成员函数)
抛出存储的异常
(公开成员函数)
获得指向存储的异常的指针
(公开成员函数)

[编辑]非成员函数

抛出实参,带上混入的 std::nested_exception
(函数模板)[编辑]
抛出 std::nested_exception 中的异常
(函数模板)[编辑]

[编辑]注解

功能特性测试标准功能特性
__cpp_lib_constexpr_exceptions202411L(C++26)constexpr 的异常类型

[编辑]示例

演示构造并通过 nested_exception 对象递归。

#include <exception>#include <fstream>#include <iostream>#include <stdexcept>#include <string>   // 打印异常的解释性字符串。若异常内嵌,则递归打印其保有的异常的解释性字符串void print_exception(conststd::exception& e, int level =0){std::cerr<<std::string(level, ' ')<<"exception: "<< e.what()<<'\n';try{std::rethrow_if_nested(e);}catch(conststd::exception& nestedException){ print_exception(nestedException, level +1);}catch(...){}}   // 示例函数,捕捉异常并将其包装于 nested_exceptionvoid open_file(conststd::string& s){try{std::ifstream file(s); file.exceptions(std::ios_base::failbit);}catch(...){std::throw_with_nested(std::runtime_error("Couldn't open "+ s));}}   // 示例函数,捕捉异常并将其包装于 nested_exceptionvoid run(){try{ open_file("nonexistent.file");}catch(...){std::throw_with_nested(std::runtime_error("run() failed"));}}   // 运行上述实例函数并打印捕捉的异常int main(){try{ run();}catch(conststd::exception& e){ print_exception(e);}}

可能的输出:

exception: run() failed exception: Couldn't open nonexistent.file exception: basic_ios::clear

[编辑]参阅

处理异常对象的共享指针类型
(typedef)[编辑]
抛出实参,带上混入的 std::nested_exception
(函数模板)[编辑]
抛出 std::nested_exception 中的异常
(函数模板)[编辑]
close