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做出要求,不同编译器结果不一样
运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值