C++中的RTTI与dynamic_cast<> static_cast<>
2014-08-03 20:49
453 查看
C++中多态的存在导致一个类型的真实类型无法确切知晓,于是RTTI(runtime Type Identification)机制应运而生。
在生成类对象模型的时候,我们会发现多了一个type_info的一项,这个便是为了方便RTTI机制确认类型所用的。
关键字typeid()运算符,它以一个对象或者类型名作为参数,返回一个匹配的const type_info对象,标明该对象的确切类型,和sizeof()一样是c++语言直接支持的。
例:if(typeid(device)==typeid(Television))其中Television是device的派生类。
当然这里的typeid同样可以用来检索非多态类型对象和基本数据类型对象的类型信息,只不过此时它不会去检索对象的vptr甚至vtable。
dynamic_cast<>运算符和static_cast<>运算符的区别:
其中static_cast是相当于c的强制类型转换,用起来可能有一点危险。dynamic_cast如果转换成引用出错的话,就会出现异常,这里需要做一个异常处理的机制。转换指针出错返回null。
dynamic_cast:
支持来两个方向上的转换upcast和downcast.
第一种:支持由派生类的指针或引用向基类型的指针或应用。虽然这种方式可以隐式转化得到。
第二种:如果基类指针或引用实质上指向的便是派生类对象则转换便能成功,否则失败,返回NULL。
RTTi由于它的方便也同时带来了相应的副作用,不仅在执行速度上而且在程序体积上都带来了额外的开销。因为他需要额外的内存来存放type_info对象。
在生成类对象模型的时候,我们会发现多了一个type_info的一项,这个便是为了方便RTTI机制确认类型所用的。
关键字typeid()运算符,它以一个对象或者类型名作为参数,返回一个匹配的const type_info对象,标明该对象的确切类型,和sizeof()一样是c++语言直接支持的。
例:if(typeid(device)==typeid(Television))其中Television是device的派生类。
当然这里的typeid同样可以用来检索非多态类型对象和基本数据类型对象的类型信息,只不过此时它不会去检索对象的vptr甚至vtable。
dynamic_cast<>运算符和static_cast<>运算符的区别:
其中static_cast是相当于c的强制类型转换,用起来可能有一点危险。dynamic_cast如果转换成引用出错的话,就会出现异常,这里需要做一个异常处理的机制。转换指针出错返回null。
dynamic_cast:
支持来两个方向上的转换upcast和downcast.
第一种:支持由派生类的指针或引用向基类型的指针或应用。虽然这种方式可以隐式转化得到。
第二种:如果基类指针或引用实质上指向的便是派生类对象则转换便能成功,否则失败,返回NULL。
RTTi由于它的方便也同时带来了相应的副作用,不仅在执行速度上而且在程序体积上都带来了额外的开销。因为他需要额外的内存来存放type_info对象。
相关文章推荐
- C++类型转换运算符: static_cast<>,reinterpret_cast<>,dynamic_cast<>, const_cast<>
- c++11 使用c++风格的cast: static_cast<type>(expression) const_cast<type> dynamic_cast reinterpret_cast
- C++ 运行时类型识别RTTI typeid<->dynamic_cast
- C++ 强制类型转换 static_cast<new_type>(expression)
- typeidRTTI.cpp;dynamic_cast<Derive22&>(b2);
- C++ 进阶——object slicing 与虚函数与dynamic_cast<>
- 关于C++ 学习的几点 理解 之 c++关键字详解(volatile,mutable,explicit,dynamic_cast<T>(expression))等
- C++ 笔记 dynamic_cast < type-id > ( expression )
- C++ 在dynamic_cast<>用法
- dynamic_cast,static_cast,const_static,reinterpret<来自百度文库>
- C++ 中dynamic_cast<>的使用方法小结 -判断类型-rtti
- C++ 中dynamic_cast<>的用法
- 对C++中类型显示转换操作符const_cast<类型>(变量)的认识
- c++关键字详解(volatile, mutable, explicit, dynamic_ cast<T>(expression))等
- c++关键字详解(volatile, mutable, explicit, dynamic_ cast<T>(expression))等
- C++ 中dynamic_cast<>的用法
- dynamic_cast<const ObjectList&>(msg);
- C++ 中dynamic_cast<>的使用方法
- C++ 中dynamic_cast<>的使用方法
- dynamic_cast<>的使用方法