程序如何管理类型信息? 我只是想知道,如何通过C++程序来管理类型信息?< /P>

程序如何管理类型信息? 我只是想知道,如何通过C++程序来管理类型信息?< /P>,c++,types,C++,Types,浮球f;需要32位内存。但是由于所有的位都用来保存值,程序如何记住它是float类型的呢 (我知道这是一个很难回答的问题…编译器管理类型。正在运行的可执行文件没有。对于可执行文件,内存中的4个字节就是内存中的4个字节。但是编译器已经确保只有整数指令或浮点指令对它们进行操作。通常(也就是说,除非您使用RTTI),程序不知道这类事情(尽管编译器非常严格地检查它以避免错误)。程序代码只是“像这样”执行,也就是说,如果您编写了一些使用浮点变量的代码,那么它将对从相应内存地址加载的任何值执行浮点指令 如果

浮球f;需要32位内存。但是由于所有的位都用来保存值,程序如何记住它是float类型的呢


(我知道这是一个很难回答的问题…

编译器管理类型。正在运行的可执行文件没有。对于可执行文件,内存中的4个字节就是内存中的4个字节。但是编译器已经确保只有整数指令或浮点指令对它们进行操作。

通常(也就是说,除非您使用RTTI),程序不知道这类事情(尽管编译器非常严格地检查它以避免错误)。程序代码只是“像这样”执行,也就是说,如果您编写了一些使用浮点变量的代码,那么它将对从相应内存地址加载的任何值执行浮点指令

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


最后,通过虚拟继承,某种类型的信息(尽管不能直接访问)存储在vtable中。对于每种对象类型(不是每一个对象,而是该类型,即所有对象都在一起),编译器都会生成一个特殊的“跳转表”,它可以正确映射重载函数。你不知道这一点,也看不到任何东西,但它“只会起作用”。然而,它隐含着一种类型信息。

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

静态类型在编译过程中由编译器管理并且,除了结果代码中嵌入的特定于类型的语义之外,在运行时被遗忘


<强>动态>类型信息通常保存在所谓的类型特定的“虚拟表”中,它保存指向类型所具有的所有虚拟函数和运行时类型信息C++支持的指针。只有多态类型(至少具有一个虚拟函数的类型)才会附加动态类型信息

C++通常不需要任何类型信息,因为它是一种静态语言,这意味着所有类型检查都是在编译时而不是运行时完成的

假设您有以下代码:

float fn(float a) { return a + 1.f; }

…编译器已经知道,
fn
应该接收一个浮点,向它添加1.f,然后返回一个浮点。它可以生成相应的机器代码,不需要在运行时查找任何东西。

< P>它可能有助于注意C++编译后的编译器是针对编译器所指定的任何CPU指令集的汇编语言。p>
像“float i=2.0+n”这样的简单操作会变成“留出32位,取2.0和另一组32位,执行32位浮点版本的加法。然后将其分配给我们刚才保留的32位”

这不是真的。在调用虚拟函数、调用
typeid
dynamic\u Cast
时,您也可以使用动态类型信息。这并不完全正确,RTTI呢?问题与简单类型有关,困惑在于在已知的固定大小数据下如何“存储”这些简单类型信息。RTTI和相关机制是一个完全不同的主题。