为了账号安全,请及时绑定邮箱和手机立即绑定

c++虚函数问题

c++虚函数问题

C++
三国纷争 2018-07-05 06:06:23
今天看《深度探索c++对象模型》上说, 编译器会把虚函数调用语句“p->func()”转化为“*(p->vptr[index])(p)”;index是偏移量,因为虚函数表中可能有多个虚函数地址。那是不是说:虚函数的调用和普通函数相比其实就多了寻址去vtable表中取得函数入口地址这一步?
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

两者的调用模型不一样,非虚函数的地址是固定的,对它的调用直接被编译为CALL 固定地址的汇编代码;虚函数的调用则是要经过找到对象中的vptr指针,通过指针找到类的vtable表,结合偏移量找到表中要调用的函数地址,最终再CALL 该地址这么几个步骤。

查看完整回答
反对 回复 2018-07-31
  • 1 回答
  • 0 关注
  • 643 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信