支持对象的用户在运行时获取到 object 的 complete type
主要谈三个关键字: dynamic cast、typeid 、type_info
dynamic cast
按照cast 方向分类,可分为upcast(派生类向基类cast)和downcast(基类向派生类cast)两种情况
按照失败原因分类,有以下几种情况
1、指针类型dynamic cast 失败会返回空指针
2、引用类型dynamic cast 失败会抛异常
3、不是有效对象的指针或引用 dynamic cast 失败会抛异常 __non_rtti_object
4、存在共同祖先的多继承,未指定cast路径的情况下编译器报歧义
参考链接:https://docs.microsoft.com/en-us/cpp/cpp/run-time-type-information?view=msvc-160