【发布时间】:2020-11-02 12:55:03
【问题描述】:
想知道C++语言如何在运行时保存变量的类型信息。在我看来,运行时是指将程序员编写的源代码文件编译成与具体机器相关的二进制格式的机器码。这个二进制文件全部由机器指令和操作数组成。在机器级别,没有这样的事情。类型的概念只是存储在寄存器和内存中的值。从机器的角度来看,这些值没有上层抽象类型。那么在运行时如何存储这些类型信息,也就是机器码执行的过程呢?运行时类型信息的声明应该怎么理解?
【问题讨论】:
-
您总是可以在机器代码中存储一些额外的数据,这些数据可以包含有关类型的信息,您可以通过某种方式检索这些信息
-
您认为您需要“理解”其中的哪些内容?我对此知之甚少,然而,不知何故,我已经能够用 C++ 做很多事情,很多很多年了,尽管如此?
-
c++ 标准对 RTTI 的实现方式几乎没有说明(如果有的话),通常实现将类型信息存储在对象的 vtable 中的某处
-
@AlanBirtles 在我看来,所谓的运行时信息根本就不是运行时行为,因为在机器码层面没有类型的概念。运行时类型信息应该是编译器的行为。编译器在编译代码时,会在特定语句中分析对象的真实类型,然后根据其真实类型指定它实际调用的代码,比如多态。所以这个指定要在编译后确定,运行时不涉及类型信息。不知道这样理解对不对?