C++ RTTI 与四种强制类型转换符

RTTI(RunTime Type Information)提供了以下两个非常有用的操作符:
  (1)typeid操作符,返回指针和引用所指的实际类型;(必须包含头文件 <typeinfo>

  (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用。

四种强制类型转换符分别是

         (1)dynamic_cast:动态类型转换   

                   dynamic_cast运算符可以在执行期决定真正的类型。如果downcast是安全的(也就说,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转   型过 的指针。如果downcast不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)

                    dynamic_cast转换符只能用于指针或者引用。dynamic_cast转换符只能用于含有虚函数的类。dynamic_cast转换操作符在执行类型转换时首先将检查能否成功转 换,如果能成功转换则转换之,如果转换失败,如果是指针则反回一个0值,如果是转换的是引用,则抛出一个bad_cast异常。

         (2)static_cast:静态类型转换   

                   该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。只能提供编译时的类型安全,通过做一点手脚,很容易骗过编译器。

                   操作符用于非多态类型的转换,任何标准转换都可以使用他,即static_cast可以把int转换为double,但不能把两个不相关的类对象进行转换,比如类A不能转换为一   个不相关的类B类型。static_cast本质上是传统c语言强制转换的替代品。

         (3)reinterpret_cast:重新解释类型转换 

                   可以把一个整型转换为一个指针,或把一个指针转换为一个整型,操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。也就 是说只是在转换时复制了相应的比特位,而没有进行必要的分析。所以此运算符比较危险,不推荐使用。

         (4)const_cast:常量类型转换

                   const_cast<type_id> (expression)

                   该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
                   ①常量指针被转化成非常量的指针,并且仍然指向原来的对象;
                   ②常量引用被转换成非常量的引用,并且仍然指向原来的对象;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值