C++ 参考手册

定义于头文件 <typeinfo>
class bad_typeid : public std::exception;

此类型的异常在应用 typeid 运算符到多态类型的空指针值时抛出。

cpp/error/exceptionstd-bad typeid-inheritance.svg

继承图

成员函数

构造新的 bad_typeid 对象
(公开成员函数)

继承自 std::exception

成员函数

析构该异常对象
(std::exception 的虚公开成员函数)
[虚]
返回解释性字符串
(std::exception 的虚公开成员函数)

示例

#include <iostream>
#include <typeinfo>
 
struct S { // 类型必须是多态
    virtual void f();
}; 
 
int main()
{
    S* p = nullptr;
    try {
        std::cout << typeid(*p).name() << '\n';
    } catch(const std::bad_typeid& e) {
        std::cout << e.what() << '\n';
    }
}

输出:

Attempted a typeid of NULL pointer!