实际上 RTTI 用到的是typeid() 和 dynamic_cast()。C++是一种静态类型语言,其数据类型是在编译期就确定的,不能在运行时更改。然而由于面向对象程序设计中多态性的要求,C++中的指针或引用本身的类型,可能与它实际代表的类型并不一致。但因为一些理论上及方法论上的原因,它破坏了面向对象的纯洁性。首先, 它破坏了抽象,使一些本来不应该被使用的方法和属性被不正确地使用。其次,因为运行时类型的不确定性,它把程序变得更脆弱。总的来说,RTTI 因为它的方法论上的一些缺点,它必须被非常谨慎地使用。今天面向对象语言的类型系统中的很多东西就是产生于避免RTTI的各种努力。
暂无评论