【问题标题】:C++ v-table: Part of the language or compiler dependent?C++ v-table:部分语言或编译器依赖?
【发布时间】:2010-09-09 08:26:02
【问题描述】:

v-table (virtual method table) 是 C++ 规范的一部分,还是由编译器来解决虚拟方法查找?

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

我猜它依赖于编译器,但有人对我说这是规范的一部分。

非常欢迎参考!

【问题讨论】:

  • 只是出于兴趣......你会如何实现它?
  • 维基百科文章中实际上列出了一些替代方案。
  • 因为您无法判断技术将如何改变标准,作者故意尝试不定义事情如何发生,而是尝试定义事情应该发生什么。如果你定义了事情应该如何运作,那么你就是在用新技术或使用新技术的能力把自己画到一个角落。

标签: c++ vtable


【解决方案1】:

1.7 C++ 内存模型 3 [...] 语言的各种特性,例如 作为引用和虚函数, 可能涉及额外的内存 无法访问的位置 程序,但由管理 执行。 [...]

你有它。这取决于实施。

【讨论】:

  • 您有该报价单的网址吗? (This one 没有说同样的话)。
  • 否,但您可以下载 n3092.pdf。我不确定该链接指的是哪个版本的草案/哪个标准。 (它甚至不为我打开!)
  • 值得强调的是,n3092.pdf 是 C++ next 版本 (C++0x) 的草案,而不是当前标准的草案。
【解决方案2】:

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

很难提供“负面”参考(即标准要求使用 v-table),但虚函数调用标准的相关部分是 5.2.2 [ expr.call] 和 10.3 [class.virtual]。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2014-02-07
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多