【发布时间】:2010-06-14 14:26:58
【问题描述】:
C++ 编译器如何理解指针类型?据我所知,指针的大小等于操作系统的 WORD(32 或 64)。那么它是否在 32 位(或 64 位)中存储了一些关于类型的信息?仅仅因为您不能在一种类型上拥有一个指针,然后为该指针分配另一个具有不同类型的指针。
【问题讨论】:
-
我认为 OP 的意思是“一些信息”。已编辑。
-
不要混淆编译时间和运行时间。在编译时,所有类型信息都是已知的并存储在编译器中。在运行时,大部分类型信息已被丢弃,并且绝对不会作为指针的一部分存储(生成的代码专门针对它知道在运行时重新雇用的类型而不参考该类型)
-
对象呢?他们有类型信息运行时吗?
-
有点。但它一般不会在运行时使用(例外当然是dynamic_cast)。编译器植入的代码通常特定于编译时推导的类型。有一些类型信息可应要求提供,但在代码中使用它是不好的做法,而且通常没有帮助。类型特定的功能是通过虚函数在语言级别实现的,并且在运行时通过方法间接访问此功能(即可能使用 v-tables 调用方法)。
标签: c++ pointers compiler-construction typeinfo