回答
它最有可能代表“Virtual Function Table”,并且是为了允许virtual function dispatch在某些运行时实现中使用的机制。
主流C++实现(GCC,Clang,MSVS)称之为vtable
。 C没有多态性。我只能推测其他语言。
这里是维基百科说的话题:
一个对象的调度表将包含的对象的 动态绑定方法的地址。方法调用是通过从对象的调度表中取得 方法的地址来执行的。调度表 对于属于同一类的所有对象都是相同的,因此通常在它们之间共享 。属于 类型兼容的类(例如继承 层次结构中的同级)的对象将具有相同布局的调度表:给定方法的地址 对于所有 类型兼容的类将显示为相同的偏移量。因此,从 获取调度表偏移的方法地址将获得对应于 对象的实际类的方法。 [1]
C++的标准没有要求准确动态调度必须如何 实现,但是编译器通常使用在相同 基本模型的微小变化。
通常,编译器为每个类创建一个单独的vtable。当创建对象 时,将添加一个指向此虚拟表的指针,称为虚拟 表指针,vpointer或VPTR,作为此对象的隐藏成员(除非它作为最后一个[2]而成为其第一个成员) 。编译器还在每个类 的构造函数中生成“隐藏”代码,以将其对象的vpointer初始化为对应的vtable的地址,即 。请注意,对象实例中的vpointer的位置在所有编译器中不是标准的,并且依赖于 该位置可能会导致不可移植的代码。例如,g ++ 先前将vpointer放置在对象的末尾。 [3]
- 埃利斯& Stroustrup的1990,第227-232
- Heading "Multiple Inheritance"
- CodeSourcery C++ ABI
你总是可以在C中自己构建一个vtable - 你的意思是说“C没有多态性的语言原语”:-) –
@Kerrek:是的;我们正在讨论什么是“vFtable”将是“高级编程语言”,即作为语言的一部分。 :) –
Vftable未明确地在C++标准所提到的,但大多数(如果不是全部)实现将其用于虚拟功能实现。
对于每个具有虚拟函数的类,编译器都会创建一个函数poiners数组,这些指针指向该类的虚拟函数的最后一个重写版本。然后每个对象都有一个指向其动态类的vtable的指针。
见这个问题,并为更多的插图
如果可以的话,我会将接受点分成两半,因为你的链接也给了我有用的信息 –
- 1. ......这是什么?
- 2. 这是什么?
- 3. 这是什么(())?
- 4. ,这是什么
- 5. 什么是PPC,这是什么意思?
- 6. 这是什么`_time_independent_equals`是什么意思?
- 7. 是$什么(这一点),这
- 8. 这是什么java.lang.NullPointerException?
- 9. 这是什么IllegalStateExeption?
- 10. 这是什么indentationError?
- 11. Mul255 - 这是什么?
- 12. 这是什么java.lang.UnsupportedClassVersionError?
- 13. 这是什么GUID?
- 14. 这是什么demo_get.asp?
- 15. 这是什么错?
- 16. 这是什么错?
- 17. 这是什么.htacces?
- 18. 这是什么href?
- 19. 这是什么:ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
- 20. EVP_get_digestbyname:这是什么..?
- 21. 这是什么 - BoC.Web.Mvc.PrecompiledViews.ApplicationPartRegistry
- 22. 这是什么? '[C]: ?'
- 23. 这是什么图?
- 24. System.ComponentModel.DataObjectMethodAttribute这是什么?
- 25. 这是什么? [field:SecurityCritical]
- 26. 这是做什么
- 27. 这ResponseEntity是什么?
- 28. Csla.Luna,这是什么?
- 29. HTML5,那么这是什么?
- 30. 这是为什么产生一个java.lang.StackOverflowError,这是什么意思?
你是一个特别的语言的接受的答案? –
有[维基百科上的文章](http://en.wikipedia.org/wiki/Vtable),你有没有读过? –