继承和内联?

use*_*112 6 c++ polymorphism virtual inline

我最近一直在做很多阅读,在覆盖继承(和虚函数)的同时,我仍然在"内联"关键字上磕磕绊绊.现在我知道inline在正常意义上是什么 - 编译器可以用确切的代码替换函数调用.但是,我看到它在继承方面提到的次数 - 在继承中使用内联是否有一些特殊的原因?我不明白为什么一直被提及....

内联函数在继承/派生类/虚函数中有什么额外的作用?

Zan*_*ynx 4

是的,在虚拟函数上使用内联是浪费时间。必须通过由函数指针组成的虚函数表来调用虚函数。内联函数不能由指针调用。它必须作为实函数存在。

但也有一些例外。当调用者知道确切的对象类型时,它可以完全跳过虚拟函数表。

过度使用 virtual 关键字可能会导致代码非常慢。编译器可能能够内联和优化三个或四个小函数调用,而对于虚拟函数,它必须执行实际的函数调用,而不对调用之间的内存或寄存器状态做出任何假设。