📜  可以内联虚拟函数吗?

📅  最后修改于: 2021-05-30 15:14:16             🧑  作者: Mango

虚函数用于实现运行时多态性,或者说说后期绑定或动态绑定。内联函数用于提高效率。的内联函数背后的整体思想是,内联函数的内联每当函数被调用的代码被插入或内联函数调用的在编译时间点取代。当经常在程序中多次使用和调用小函数时,内联函数非常有用。

默认情况下,在类中定义的所有函数都隐式或自动视为内联函数(虚拟函数除外)(请注意,内联函数是对编译器的请求,编译器可以选择是否进行内联)。

每当使用基类引用或指针调用虚拟函数,都不能内联(因为调用是在运行时解析的),但是只要使用该类的对象(不带引用或指针)进行调用,就可以内联,因为编译器知道确切的类编译时的对象。

#include 
using namespace std;
class Base
{
public:
    virtual void who()
    {
        cout << "I am Base\n";
    }
};
class Derived: public Base
{
public:
    void who()
    { 
        cout << "I am Derived\n";
    }
};
  
int main()
{
    // note here virtual function who() is called through
    // object of the class (it will be resolved at compile
    // time) so it can be inlined.
    Base b;
    b.who();
  
    // Here virtual function is called through pointer,
    // so it cannot be inlined
    Base *ptr = new Derived();
    ptr->who();
  
    return 0;
}

参考:
http://www.parashift.com/c++-faq/inline-virtuals.html
有效的C++,作者:斯科特·迈耶斯(Scott Meyers)

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”