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

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

C++中的typeinfo :: bad_typeid及其示例

typeinfo::bad_typeid是一个异常类,当类型不匹配时会被抛出。在C++中,typeinfo类可以用来获取指定类型的信息,包括类型名字、是否为指针、是否为引用等,使用typeid操作符即可获取类型信息,如果所请求的类型信息是无效的,则会抛出bad_typeid异常。

下面是bad_typeid异常的详细信息:

class bad_typeid : public std::exception {
public:
    bad_typeid() noexcept;
    bad_typeid(const bad_typeid&) noexcept;
    bad_typeid& operator=(const bad_typeid&) noexcept;
    virtual ~bad_typeid() noexcept;
    virtual const char* what() const noexcept;
};

bad_typeid继承自std::exception类,有默认构造函数、复制构造函数、赋值运算符和虚析构函数。在异常处理程序捕获到该异常时,应使用what函数返回异常的消息。

下面是一段程序示例,展示了可以引发typeinfo::bad_typeid异常的情况:

#include <iostream>
#include <typeinfo>

int main() {

    try {
        int *p = nullptr;
        std::cout << typeid(*p).name() << std::endl;
    }
    catch(std::exception& e) {
        std::cout << "Caught exception : " << e.what() << std::endl;
    }

    return 0;
}

这个程序定义了一个指向整数类型的指针p,并使用typeid操作符获取指针所指的对象的类型信息。但是,由于p是空指针,所以无法获取指向的类型信息,因此会抛出typeinfo::bad_typeid异常。在catch语句块中,使用e.what()打印异常的消息。

执行这个程序,我们可以看到输出:

Caught exception : std::bad_typeid

这说明程序捕获到了typeinfo::bad_typeid异常,并打印了异常消息。

总之,typeinfo::bad_typeid是一个常见的C++异常类型,当使用typeid操作符获取无效类型信息时会被抛出。对于无法确定类型的变量,应该对其进行检查以避免捕获到这个异常。