C++虚函数(10) - 虚函数能否为inline?
虚函数用于实现运行时的多态,或者称为晚绑定或动态绑定。而内联函数用于提高效率。内联函数的原理是,在编译期间,对调用内联函数的地方的代码替换成函数代码。内联函数对于程序中需要频繁使用和调用的小函数非常有用。 默认地,类中定义的所有函数,除了虚函数之外,会隐式地或自动地当成内联函数(注意:内联只是对于编译器的一个请求,编译器可以自己决定是否进行内联). 无论何时,使用基类指针或引用来调用虚函数,它都不能为内联函数(因为调用发生在运行时)。但是,无论何时,使用类的对象(不是指针或引用)来调用时,可以当做是内联,因为编译器在编译时确切知道对象是哪个类的。 #include <iostream> 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() { // 此处的虚函数who(),是通过类的具体对象来调用的,编译期间就能确定了,所以它可以是内联的。 Base b; b.who(); // 此处的虚函数是通过指针调用的,需要在运行时期间才能确定,所以不能为内联。 Base *ptr =