<exception>

std::bad_exception

class bad_exception;
由 unexpected 处理器抛出的异常

这是一种特殊的异常类型,专门用于列入函数的动态异常说明符(即其 throw 说明符)中。

如果一个函数在其动态异常说明符中列出了 bad_exception,但抛出了未列出的异常,并且 unexpected 重新抛出了该异常(或抛出了任何其他也未包含在动态异常说明符中的异常),则会自动抛出一个 bad_exception

其成员 what 返回一个空终止字符序列,用于标识该异常。

(自 C++11 起) 在 current_exception 的某些实现下,此异常会被抛出,以指示复制异常对象的操作失败。

兼容性

*dynamic-exception-specifier*的使用已被弃用(自C++11起)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// bad_exception example
#include <iostream>       // std::cerr
#include <exception>      // std::bad_exception, std::set_unexpected

void myunexpected () {
  std::cerr << "unexpected handler called\n";
  throw;
}

void myfunction () throw (int,std::bad_exception) {
  throw 'x'; // throws char (not in exception-specification)
}

int main (void) {
  std::set_unexpected (myunexpected);
  try {
    myfunction();
  }
  catch (int) { std::cerr << "caught int\n"; }
  catch (std::bad_exception be) { std::cerr << "caught bad_exception\n"; }
  catch (...) { std::cerr << "caught some other exception\n"; }
  return 0;
}

输出

unexpected handler called
caught bad_exception


异常安全

无异常保证:无成员抛出异常。

另见