vptr名称在c++中已损坏

is vptr name mangled in c++?

本文关键字:已损坏 c++ vptr      更新时间:2023-10-16

尽管有很多关于如何在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);

其中索引指向vtable条目。

我的疑问是这个vptr是否也被名字篡改了?

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

您无法通过语言手段访问C++中的vptr,因此请在"no"中回答-没有这样的变量和名称,因此没有其损坏:)