3

有一个相关的小问题。但主题完全不同。

现在,一个概念是关于函数解析,另一个是关于class解析?我想知道如果他们使用相同的vtable至少在 gcc-4.5 中)怎么可能?这是一个依赖于编译器的术语吗?

我知道这可能看起来像一个基本的愚蠢问题,但我从来没有想过它。

4

2 回答 2

3

此类事情的一个很好的参考是 Itanium ABI - 参见例如http://mentorembedded.github.com/cxx-abi/abi.html#vtable。尽管名称如此,但它是 C++ 中广泛使用的 ABI,它描述了一个很好的、有效的实现(尽管显然其他实现也是可能的)。

于 2011-06-26T08:54:45.677 回答
1

如果您知道一个对象的动态类型,只需一个指向它的指针,您就可以解决这两个问题(虚拟函数调用和虚拟继承)。C++ 中的每个(多态)对象都只有一种动态类型,它在构造它的那一刻就确定了。例如,当您编写时new Foo,该对象具有动态类型Foo,即使您只存储一个void*.

Avtable是一种存储有关对象动态类型的信息的机制,以便可以通过基指针对其进行检索。您可以在 vtable 中存储很多东西:函数指针、转换偏移量,std::type_info甚至对象。

于 2011-06-27T08:24:01.563 回答