std::rethrow_exception
来自 cppreference.com
在头文件 <exception> 中定义 |
||
[[noreturn]] void rethrow_exception( std::exception_ptr p ); |
(自 C++11 起) | |
抛出由异常指针 p 引用的先前捕获的异常对象,或该对象的副本。
未指定是否创建了副本。如果创建副本,则为其分配的存储方式未指定。
如果 p 为空,则行为未定义。
内容 |
[编辑] 参数
p | - | 非空 std::exception_ptr |
[编辑] 返回值
(无)
[编辑] 异常
由 p 引用的异常对象(如果未创建副本)。
否则,如果实现成功复制了异常对象,则为该异常对象的副本。
否则,如果分配或复制失败,则分别为 std::bad_alloc 或在复制异常对象时抛出的异常。
[编辑] 注释
在 P1675R2 之前,不允许 rethrow_exception
复制异常对象,这在某些异常对象在堆栈上分配的平台上无法实现。
[编辑] 示例
运行此代码
#include <exception> #include <iostream> #include <stdexcept> #include <string> void handle_eptr(std::exception_ptr eptr) // passing by value is OK { try { if (eptr) std::rethrow_exception(eptr); } catch(const std::exception& e) { std::cout << "Caught exception: '" << e.what() << "'\n"; } } int main() { std::exception_ptr eptr; try { [[maybe_unused]] char ch = std::string().at(1); // this generates a std::out_of_range } catch(...) { eptr = std::current_exception(); // capture } handle_eptr(eptr); } // destructor for std::out_of_range called here, when the eptr is destructed
可能的输出
Caught exception: 'basic_string::at: __n (which is 1) >= this->size() (which is 0)'
[编辑] 另请参阅
(C++11) |
用于处理异常对象的共享指针类型 (typedef) |
(C++11) |
在 std::exception_ptr 中捕获当前异常 (函数) |