gpt4 book ai didi

c++ - C++成员函数的内存实现

转载 作者:太空狗 更新时间:2023-10-29 23:47:58 25 4
gpt4 key购买 nike

我在Wikipedia读到一篇关于虚拟表的文章.

class B1
{
public:
void f0() {}
virtual void f1() {}
int int_in_b1;
};

class B2
{
public:
virtual void f2() {}
int int_in_b2;
};

used to derive the following class:

class D : public B1, public B2
{
public:
void d() {}
void f2() {} // override B2::f2()
int int_in_d;
};

看完之后我不禁想知道非虚成员函数在C++中是如何实现的。是否有一个单独的表,如存储所有函数地址的 v 表?如果是,这个表叫什么,在继承过程中它发生了什么?

如果不是那么编译器如何理解这些语句?

D * d1 = new D;
d1->f0(); // statement 1

编译器如何解释 f0() 是 B1 的函数,并且由于 D 公开继承了 D 它可以访问 f0()。根据文章,编译器将语句 1 更改为

(*B1::f0)(d)

最佳答案

非虚拟成员函数的实现类似于接受隐藏的this 参数的全局函数。编译器在编译时就知道根据继承树调用哪个方法,所以不需要运行时表。

关于c++ - C++成员函数的内存实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3174835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com