函数
<exception>

std::current_exception

exception_ptr current_exception() noexcept;
获取当前异常的智能指针
返回一个指向当前处理的异常或其副本的 exception_ptr 对象。

如果没有处理任何异常,该函数将返回一个*空指针*值。

exception_ptr 是一个共享的*智能指针*类型:只要至少有一个 exception_ptr 指向它,所指向的异常就保证保持有效,这可能会延长所指向异常对象的生命周期,使其超出其作用域或跨越线程。有关更多信息,请参阅 exception_ptr

此函数不抛出异常,但如果该函数实现为返回一个指向*当前处理的异常*的*副本*的指针,则在无法分配存储空间(bad_alloc)或复制过程失败时(如果可能,则返回抛出的异常或 bad_exception;否则返回其他未指定的值),它可能会返回一个指向不同异常的指针。

参数



返回值

一个指向*当前处理的异常*的 exception_ptr 对象,或者在函数内部过程会引发新异常时指向另一个异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// exception_ptr example
#include <iostream>       // std::cout
#include <exception>      // std::exception_ptr, std::current_exception, std::rethrow_exception
#include <stdexcept>      // std::logic_error

int main () {
  std::exception_ptr p;
  try {
     throw std::logic_error("some logic_error exception");   // throws
  } catch(const std::exception& e) {
     p = std::current_exception();
     std::cout << "exception caught, but continuing...\n";
  }

  std::cout << "(after exception)\n";

  try {
     std::rethrow_exception (p);
  } catch (const std::exception& e) {
     std::cout << "exception caught: " << e.what() << '\n';
  }
  return 0;
}

输出

exception caught, but continuing...
(after exception)
exception caught: some logic_error exception


数据竞争

该函数是返回一个指向*当前处理的异常*的对象还是其副本,取决于具体的库实现。

异常安全

无抛出保证:此函数不抛出异常。相反,此函数使用其返回值来指示在其内部操作过程中抛出的异常。

另见