C++中的虚函数表:是语言的一部分还是与编译器相关?

11

虚函数表(virtual method table)是C++规范的一部分,还是由编译器解决虚函数查找?

如果它是规范的一部分:为什么?

我猜这取决于编译器,但有人告诉我它是规范的一部分。

欢迎提供参考资料!


只是出于兴趣...你还有其他的实现方式吗? - Goz
实际上,维基百科文章中列出了几个替代方案。 - aioobe
4
由于技术的变化无法预测,标准编写者会刻意避免定义“如何发生”的过程,而是力求定义“应该发生”什么。如果你定义了“如何工作”,那么你就限制了自己使用新技术或新方法的能力。 - Martin York
2个回答

15

1.7 C++内存模型 3 [...] 语言的各种特性,例如引用和虚函数, 可能涉及到其他的内存位置,这些位置对程序不可访问,但由实现管理。[...]

这就是答案,它取决于实现。


你有那个引用的URL吗?(这个说的不一样)。 - aioobe
不行,但你可以下载n3092.pdf。我不确定该链接指的是哪个版本的草案/标准。 (它甚至对我都无法打开!) - dirkgently
4
值得强调的是 n3092.pdf 是 C++ 的下一个版本(C++0x)的草案,而不是当前标准的草案。 - CB Bailey

5

不,它不是语言规范的一部分。标准规定了如何解析虚函数调用,但编译器实现所需结果的机制并未被规定。

很难提供“否定”参考(即标准未强制规定v表的位置),但与虚函数调用相关的标准部分是5.2.2 [expr.call]和10.3 [class.virtual]。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接