运行时类型识别
| 定义于头文件 |
当 typeid 表达式中的实参为空值时抛出的异常
std::bad_typeid
| class bad_typeid : public std::exception; |
此类型的异常在应用 typeid 运算符到多态类型的空指针值时抛出。
![]()
成员函数
| (构造函数) | 构造新的 bad_typeid 对象(公开成员函数) |
继承自 std::exception
成员函数
| (析构函数) [虚] | 析构该异常对象 ( std::exception 的虚公开成员函数) |
| what [虚] | 返回解释性字符串 ( std::exception 的虚公开成员函数) |
调用示例
#include <iostream>
#include <typeinfo>
struct S // 类型必须是多态
{
S() {}
virtual void f() {}
};
int main()
{
S* p = nullptr;
try
{
std::cout << typeid(*p).name() << std::endl;
}
catch (const std::bad_typeid& e)
{
std::cout << e.what() << std::endl;
}
S* p1 = new S;
try
{
std::cout << typeid(*p1).name() << std::endl;
}
catch (const std::bad_typeid& e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
输出

由非法的 dynamic_cast 表达式抛出的异常,即引用类型转型失败
std::bad_cast
| class bad_cast : public std::exception; |
![]()
继承图
成员函数
| (构造函数) | 构造新的 bad_cast 对象 (公开成员函数) |
继承自 std::exception
成员函数
| (析构函数) [虚] | 析构该异常对象 ( std::exception 的虚公开成员函数) |
| what [虚] | 返回解释性字符串 ( std::exception 的虚公开成员函数) |
调用示例
#include <iostream>
#include <typeinfo>
struct Foo
{
virtual ~Foo() {}
};
struct Bar
{
virtual ~Bar() {}
};
int main()
{
Bar b;
try
{
Foo& f = dynamic_cast<Foo&>(b);
}
catch (const std::bad_cast& e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
输出



![[CSP-S 2023] 种树 —— 二分+前缀和](https://img-blog.csdnimg.cn/15a7b96ed4174ee399b0f3879d0ede15.png)






![[SQL开发笔记]SELECT DISTINCT语句:返回唯一不同的值](https://img-blog.csdnimg.cn/74ed1928d0e84498bba3e200d1e905f4.png)









![[SQL开发笔记]SELECT 语句:读取数据表的信息](https://img-blog.csdnimg.cn/ad4002024ccb464cb599450024c23078.png)