是否含有RTTI(运行时类型信息)是动态语言与静态语言的主要区别

时间:2023-03-08 17:39:53

运行时类型信息代表类型信息和对内存的操作能力。

运行时类型信息是运行时系统的基础。

类型信息分为编译时类型信息和运行时类型信息两种;

静态语言的类型信息只在编译时使用和保留,在可执行文件中没有类型信息;

类型信息只用于编译时的类型检查、函数绑定等

类型信息:从编译到运行

1、静态语言:从编译到运行类型信息全部消除;

2、弱动态语言:从编译到运行,类型信息选择性的保留;

3、动态语言:类型信息全部保留(oc的isa、java的class)。

c++的RTTI实现

编译器会为每一种typeid操作的类型生成一份保存在数据段的type_info数据。

https://blog.****.net/passion_wu128/article/details/38441633

dynamic_cast转换符只能用于指针或者引用。dynamic_cast转换符只能用于含有虚函数的类。dynamic_cast转换操作符在执行类型转换时首先将检查能否成功转换,如果能成功转换则转换之,如果转换失败,如果是指针则反回一个0值,如果是转换的是引用,则抛出一个bad_cast异常,所以在使用dynamic_cast转换之间应使用if语句对其转换成功与否进行测试,比如pd=dynamic_cast<D*>(pb); if(pd){…}else{…},或者这样测试if(dynamic_cast<D*>(pb)){…}else{…}。

http://www.cnblogs.com/tgycoder/p/5427303.html