c++虚函数问题

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

三国纷争
浏览 654回答 1
1回答

POPMUISE

两者的调用模型不一样,非虚函数的地址是固定的,对它的调用直接被编译为CALL 固定地址的汇编代码;虚函数的调用则是要经过找到对象中的vptr指针,通过指针找到类的vtable表,结合偏移量找到表中要调用的函数地址,最终再CALL 该地址这么几个步骤。
打开App,查看更多内容
随时随地看视频慕课网APP