请问大虾:帮我简明的解释一下RTTI,可否?

eduyu 2004-01-19 05:09:27
Run-time type information (RTTI) is a mechanism that allows the type of an object to be determined during program execution.

不懂。每个Object的类型在用的时候肯定是确定的了,难道还要在Run-time的时候determine?
...全文
35 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
BluntBlade 2004-01-20
  • 打赏
  • 举报
回复
M$也算厉害,几个宏就把RTTI搞出来。不过看得人头晕……
2004-01-20
  • 打赏
  • 举报
回复
我的理解是这样的:RTTI是编译器支持的,可以在程序运行过程中检测对象类型的方法。
它有以下几种用法:
dynamic_cast,用于一些类型的强制转换
typeid,用获取一些运行时的信息,主要用于程序的自我检测,可以捕获一些类似于传递错误指针一类的错误。

具体使用方法MSND参见说明吧
youngphoneix 2004-01-20
  • 打赏
  • 举报
回复
何不去看《C++经典问答》?
robbit2002 2004-01-19
  • 打赏
  • 举报
回复
typeinfo
Wolf0403 2004-01-19
  • 打赏
  • 举报
回复
如果 Turbo C++ 3.0 也能支持 CRuntimeClass 的话,MS 岂不是颜面扫地了?呵呵。
不过我想 MFC7 还保留 CRuntimeClass 不是处于向下兼容的考虑,而是对 C++ RTTI 的一个加强。C++ 本身的 RTTI 还是太弱了。

RTTI 并不是那么常用的一个技术——不错。很多时候可以用多态+虚函数来代替。另外,RTTI 很可能带来一些很不好的编程习惯,例如:typeof 的并列比较等等。。。C++ Primer Plus 提到过这点。
mechgoukiteng 2004-01-19
  • 打赏
  • 举报
回复
另外,RTTI并不是一个值得经常使用的技术-----除了一些特别的地方,比如双分派
BluntBlade 2004-01-19
  • 打赏
  • 举报
回复
在99年以前C++语言本身并没有涵盖RTTI机制。所以编译器厂商都会搞自己的RTTI库。
这算是历史遗留问题了。
新版的MFC中仍然保留有CRuntimeClass吧,为了保证向下兼容的。
其实按M$的说法,VC++的最新版编译器应该可以实现RTTI机制而不依赖于特定类库了。
zhjie374 2004-01-19
  • 打赏
  • 举报
回复
我代替他问个问题,CRuntimeClass是MFC的类,但是面向对象的C++语言,与编译器无关吧!?
那么在TC3中是否也有一个想CRuntimeClass的东西在作用!!
BluntBlade 2004-01-19
  • 打赏
  • 举报
回复
RTTI可以让程序在运行时期获得与类相关的信息。
使得程序可以进行类识别(用于动态生成)、安全的动态转型等。
Wolf0403 2004-01-19
  • 打赏
  • 举报
回复
struct Base
{ virtual ~Base(){} }
struct Derived
: public Base
{
void Derived_Func() const {}
virtual ~Derived(){}
}

void Function(const Base * _p)
{
// 这里如何知道 _p 是指向一个 Base 还是一个 Derived?用 RTTI -- dynamic_cast
if (NULL != (const Derived * _pD = dynamic_cast<const Derived *>(_p))
_pD->Derived_Func(); // 是指向一个 Derived 对象
else // 指向的是一个 Base 对象
;
}
robbit2002 2004-01-19
  • 打赏
  • 举报
回复
这里的类型指的是面向对象的概念,也就是说每一个继承这个object类型的类,都是这个object类型的子类型,所以在运行时期需要determine这个object类型到底是哪一个子类型。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧