为什么RTTI似乎不赞成?

时间:2012-06-27 18:42:43

标签: c++

似乎无处不在,我读到如果不需要RTTI,或者文章建议不要使用它,图书馆就会自夸。它有什么不好的,为什么不需要它这么好呢?

由于

6 个答案:

答案 0 :(得分:14)

  1. 因为使用它通常意味着你正在颠覆多态(if (type is foo) { do this; } else if (type is bar) { do that; } else ...),这通常意味着你已经将自己设计成一个角落,需要重新考虑你的设计。

  2. 因为C ++编译器的作者在优化多态行为方面付出了很多努力,但在优化RTTI的使用方面则不那么努力。

答案 1 :(得分:2)

C ++允许使用模板进行大量静态技巧,从而减少了对RTTI的需求(在编译时一切都是通用的,但在运行时是具体的。)

相反,处理类的“真实”(SmallTalk-like)OOP方式需要动态绑定和RTTI。

C ++允许这两者,但过多的dynamic_cast和虚函数可能会降低性能。

答案 2 :(得分:1)

许多剥离的嵌入式系统将具有不支持RTTI的更简单/更小的实现。如果您的库不需要它,那么您可以移植到更多系统。

答案 3 :(得分:0)

RTTI为CRT(C运行时)带来了更大的作用。 C ++开发人员珍惜执行速度。最后一件事就是引入运行时,这会使应用程序相对变慢。

答案 4 :(得分:-1)

RTTI在设计时指定的全局唯一序数可以做得更好。不使用RTTI的两个原因。

性能:提出一个可以扩展以及使用序数/枚举来表示类型的实现是非常简单的,因为你不需要命名空间冲突,你必须使用字符串,而不仅仅是字符串,全局唯一字符串。在脚本语言中,一切都是字符串,因此这些语言中没有皱眉。

设计优雅:基于序数的打字工作,如果你使用它,你有可能从一开始就正确地设计系统。这样的设计总是比依赖RTTI好。

答案 5 :(得分:-1)

这不是一件好事(没有/使用RTTI)。绑定应尽可能晚(但不能更晚)。速度和功耗需求限制了您可以约束的时间,但芯片技术的发展意味着越来越多的项目可以承担以后的绑定。后来的绑定允许稍后进行设计决策,当有更多信息可用时,可以做出更好的决策。