今天看《深度探索c++對象模型》上說, 編譯器會把虛函數調用語句“p->func()”轉化為“*(p->vptr[index])(p)”;index是偏移量,因為虛函數表中可能有多個虛函數地址。那是不是說:虛函數的調用和普通函數相比其實就多了尋址去vtable表中取得函數入口地址這一步?
1 回答

POPMUISE
TA貢獻1765條經驗 獲得超5個贊
兩者的調用模型不一樣,非虛函數的地址是固定的,對它的調用直接被編譯為CALL 固定地址的匯編代碼;虛函數的調用則是要經過找到對象中的vptr指針,通過指針找到類的vtable表,結合偏移量找到表中要調用的函數地址,最終再CALL 該地址這么幾個步驟。
- 1 回答
- 0 關注
- 691 瀏覽
添加回答
舉報
0/150
提交
取消