C++学习(二六四)RTTI

Posted hankern

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习(二六四)RTTI相关的知识,希望对你有一定的参考价值。

Run Time Type Identification,

通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引用所指的对象的实际派生类型。

为什么会出现RTTI这一机制,这和C++语言本身有关系。和很多其他语言一样,C++是一种静态类型语言。其数据类型是在编译期就确定的,不能在运行时更改。然而由于面向对象程序设计中多态性的要求,C++中的指针或引用(Reference)本身的类型,可能与它实际代表(指向或引用)的类型并不一致。有时我们需要将一个多态指针转换为其实际指向对象的类型,就需要知道运行时的类型信息,这就产生了运行时类型识别的要求。和Java相比,C++要想获得运行时类型信息,只能通过RTTI机制,并且C++最终生成的代码是直接与机器相关的。

RTTI提供了两个非常有用的操作符:typeid和dynamic_cast。

typeid操作符,返回指针和引用所指的实际类型;

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

要使用typeid必须使用头文件<typeinfo>

 

RTTI仅适用于多态类,具有至少一个虚函数。在C++中存在虚函数,也就存在了多态性,对于多态性的对象,在程序编译时可能会出现无法确定对象的类型的情况。当类中含有虚函数时,其基类的指针就可以指向任何派生类的对象,这时就有可能不知道基类指针到底指向的是哪个对象的情况,类型的确定要在运行时利用运行时类型标识做出。RTTI可使用dynamic_cast <>运算符进行安全的类型转换,并在运行时使用typeid运算符和std :: type_info来确定类型。

以上是关于C++学习(二六四)RTTI的主要内容,如果未能解决你的问题,请参考以下文章

C++学习(四六四)Microsoft.Cpp.Platform.targets(67,5): error MSB8020: 无法找到 <unsupported> 的生成工具

C++学习(四六四)Microsoft.Cpp.Platform.targets(67,5): error MSB8020: 无法找到 <unsupported> 的生成工具

C++学习(二六二)LLDB

C++学习(二六九)CMake的message输出信息

C++学习(二六八)CMake命令和变量的大小写

C++学习(三二六)osgGA::PointerData的作用