即使有太多关于如何在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名称在C++中变形了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12119698/

10-11 18:14