【问题标题】:is vptr name mangled in c++?vptr 名称是否在 C++ 中被破坏?
【发布时间】:2012-08-25 06:16:28
【问题描述】:

尽管有很多关于如何在 c++ 中处理虚函数的文章,但我还是无法清除一个基本疑问。派生类的 vptr 变量是否被基类变量覆盖。 ptr 变量是否也名称错误?

Class Base
{
public:
    virtual void test();
};

class Derived 
{
public:
     virtual void test();
};

如果我打电话

Base b = new Derived();
b->test();

它变成了

(*b->vptr[<index>])(b);

index 指向 vtable 条目的位置。

我的疑问是这个 vptr 是否也名称混乱?

【问题讨论】:

    标签: c++ virtual-functions


    【解决方案1】:

    C++ 标准甚至不承认在多态类中存在vptr,因为它是一个实现细节,因此甚至不需要编译器以这种方式实现虚函数。所以不,vptr 不是保留关键字(我认为您要问的是)。

    【讨论】:

    • 我有这个疑问是因为,如果基类对象指针初始化为派生类(在我的情况下为 b),调用虚函数,它将使用哪个 vptr,它是基类 vptr 还是子类vptr ?
    • 基类vptr(在所有派生类中也存在)指向派生类的虚表。当然,所有这些都取决于实现,因此您无法从 C++ 代码中访问它。
    【解决方案2】:

    您无法通过语言方式访问 C++ 中的 vptr,因此请回答“否” - 没有这样的变量和名称,因此没有它的修饰:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-13
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2016-07-11
      • 1970-01-01
      • 2020-04-17
      相关资源
      最近更新 更多