C++中虚函数可以是内联的吗?

虚函数是类的成员函数,在基类中用关键词virtual声明并且可以在派生类中被重写(覆盖)。他们被用来实现运行时多态(后期绑定或者动态绑定)。

内联函数是在编译的时候用来替换到函数调用时的位置。在编译时,当一个内联函数被调用时,内联函数的代码会被插入或替换到内联函数被调用的位置。当程序很小并且被项目多次调用时,内联函数会提高效率。

默认情况下, 在类内定义的函数被隐式的视为内联函数,除了虚函数
Note: 内联与否由编译器决定。

虚函数可以是内联的吗?
当一个虚函数使用基类的引用或者指针时不能是内联的,因为该调用在运行时解析。
但当调用类的对象(非引用或指针)时,虚函数可以是内联的,因为编译器在编译时知道对象的确切类。

Example:

#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() {
    // Part 1
    Base b;
    b.who();

    // Part 2
    Base* ptr = new Derived();
    ptr->who();
    return 0;
}

Output

I am Base
I am Derived

解释 :在Part1,因为类的对象是在编译时解析的,所以可以是内联的。在Part2,虚函数通过指针调用,所以它不能被内联

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值