C++运行时类型判断dynamic_cast和typeid

dynamic_cast

dynamic_cast < Type-id > ( expression )

dynamic_cast<类型>(变量)

运行期间检测类型转换是否安全

dynamic_cast < Type-id > ( expression )

  1. 基类指针转换为派生类指针,将基类引用转换为派生类引用;
  2. 转换是有条件
    1. 如果指针(或引用)所指对象的实际类型与转换的目的类型兼容,则转换成功进行;
    2. 否则如执行的是指针类型的转换,则得到空指针;如执行的是引用类型的转换,则抛出异常

下面是一个例子:
例子代码
运行结果:
运行结果
static_cast < Type-id > ( expression )

该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。

typeid

typeid是C++关键字,获得类型的相关信息

typeid语法形式:

  1. typeid ( 表达式 )
  2. typeid ( 类型说明符 )

typeid功能: 获得表达式或类型说明符的类型信息

表达式有多态类型时,会被求值,并得到动态类型信息;

否则,表达式不被求值,只能得到静态的类型信息。

类型信息用type_info对象表示

type_info是typeinfo头文件中声明的类;

typeid的结果是type_info类型的常引用; const type_info &xxx = typeid(xxxx)

可以用type_info的重载的“==”、“!=”操作符比较两类型的异同;

type_info的name成员函数返回类型名称,类型为const char *。
例子代码:
例子代码
运行结果:
由于C++标准没有对typeid做出要求,不同编译器结果不一样
运行结果

posted @ 2020-04-23 21:11  yanhua-tj  阅读(118)  评论(0编辑  收藏  举报