📅  最后修改于: 2023-12-03 14:59:51.023000             🧑  作者: Mango
在C++中,typeid运算符可用于获取表达式或类型的运行时类型信息。在这种情况下,运算符返回一个std::type_info对象,该对象包含有关查询类型的信息,例如类型名称。
然而,当我们尝试将类型转换为其中一个typeid返回的类型时,有时会发生std::bad_cast异常。这是因为类型转换类型不与查询类型匹配,因此无法执行转换。
下面是一个示例,演示了举个例子,在查询的类型不支持类型转换时发生std::bad_cast的情况:
#include <iostream>
#include <typeinfo>
class A {
public:
virtual ~A() {}
};
class B : public A {
public:
virtual ~B() {}
};
int main() {
try {
A& a = *new A();
B& b = dynamic_cast<B&>(a); // 抛出std::bad_cast异常
}
catch (std::bad_cast& e) {
std::cerr << "Exception caught: " << e.what() << std::endl;
}
return 0;
}
在上面的示例中,我们尝试将A对象转换为B对象,并将结果存储在b引用中。由于A不是B的子类,dynamic_cast操作符将抛出std::bad_cast异常。这会导致try块中的代码跳转到相应的catch块。在此示例中,我们将异常的what()方法的返回值打印到标准错误流中。
结果输出如下:
Exception caught: std::bad_cast
在C++中,std::bad_cast是一个异常,它表示动态类型转换失败。因此,当您执行类型转换操作时,应始终准备好捕捉std::bad_cast异常。