📅  最后修改于: 2023-12-03 14:39:57.877000             🧑  作者: Mango
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
操作符获取无效类型信息时会被抛出。对于无法确定类型的变量,应该对其进行检查以避免捕获到这个异常。