程序如何管理类型信息?

Fab*_*ian 6 c++ types

我只是想知道,如何通过c ++程序管理类型信息?

例如.漂浮f; 需要32位内存.但由于所有位都用于保存值,程序如何记住它是float类型?

(我知道这是一个非常古怪的问题...)

sbi*_*sbi 12

您需要区分静态(编译时)类型和动态(运行时)类型.

静态类型在编译期间由编译器管理,除了在生成的代码中嵌入的特定于类型的语义,在运行时被遗忘.

动态类型信息通常保存在所谓的特定于类型的"虚拟表"中​​,该表保存指向该类型具有的所有虚函数以及C++支持的少量运行时类型信息的指针.只有多态类型(具有至少一个虚函数的类型)才会附加动态类型信息.


Dam*_*mon 7

通常(也就是说,除非你使用RTTI)程序不知道那种事情(虽然编译器非常严格地检查它以避免错误).程序代码只执行"就好",即如果你编写了一些使用浮点变量的代码,那么它将对从相应内存地址加载的任何值执行浮点指令.

如果使用RTTI(运行时类型信息),则编译器会在可执行文件中存储大量额外信息,这也允许您在运行时确定类型.

最后,通过虚拟继承,某种类型的信息(虽然不能直接访问)存储在vtable中.对于每个对象类型(不是每个对象,但对于类型,即所有对象在一起),编译器会生成一个特殊的"跳转表",使其能够正确映射重载的函数.你不知道这个,你没有看到任何东西,但它会"正常工作".然而,它是一种隐含的类型信息.