📜  C++中的typeinfo :: bad_cast及其示例(1)

📅  最后修改于: 2023-12-03 14:59:51.023000             🧑  作者: Mango

C++中的typeid::bad_cast及其示例

在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异常。