<typeinfo>

std::bad_cast

class bad_cast;
在动态转换失败时抛出异常

当对多态类类型的引用执行运行时检查失败时,由 dynamic_cast 抛出的异常的类型。

如果对象将成为目标类型的某个不完整对象,则运行时检查会失败。

其成员 what 返回一个标识异常的以 null 结尾的字符序列

标准库中的某些函数也可能抛出此异常以指示类型转换错误。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// bad_cast example
#include <iostream>       // std::cout
#include <typeinfo>       // std::bad_cast

class Base {virtual void member(){}};
class Derived : Base {};

int main () {
  try
  {
    Base b;
    Derived& rd = dynamic_cast<Derived&>(b);
  }
  catch (std::bad_cast& bc)
  {
     std::cerr << "bad_cast caught: " << bc.what() << '\n';
  }
  return 0;
}

可能的输出

bad_cast caught: St8bad_cast


异常安全

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

另见