C++ inline 内联函数

一、概述

  • 正常函数调用时将程序执行权转到被调用函数中,执行结束后再返回调用它的函数中,需要经历:

a) 在栈中为形参和局部变量分配存储空间;

b) 把实参值复制给形参;

c) 把函数返回地址放入栈中,以便函数结束后知道应该回到程序的哪个位置继续执行;

d) 跳转到函数内部执行;

e) 函数执行结束后从栈中回收形参和局部变量占用的存储空间;

f) 从栈中取出返回地址,跳转到该地址, 并将执行控制权返回给调用它的函数。以上调用过程产生开销并消耗时间。

  • 内联函数解决的问题:对于小型的函数,可能调用函数实现程序执行权转换的过程比函数体代码运行的时间还要长。但是从程序逻辑设计角度看,实现单独功能的代码块写成函数更加清晰,即便函数较小。

内联函数就是为解决以上问题/矛盾而生的。

通过将函数设置成内联函数,内联函数在调用时将调用表达式用内联函数体替换,而不像一般的函数调用那样将程序执行权转到被调用函数中,从而节省函数调用的时间。其代价是需要占用内存,因此适合规模小(~10行左右的)、流程直接、调用频繁的函数。一般内部含有循环的函数不适合定义成inline的。

二、使用方法

inline是“用于实现”的关键字,必须放在函数定义中才起作用。在函数声明处加不加inline关键字都可以,一般不加,因为用户无需关注是否是inline的。

inline关键字放在返回类型之前。

2.1 直接在函数的声明或定义前加inline关键字。

inline double square(double x){return x*x;}
int main()
{
    a = square(5.0);
}

2.2 将类的成员函数定义为inline的: 

class Test {
public:
    Test(double input) { member = input; } //定义在类内的函数时默认inline的
    double explicit_inline( double input2 );
private:
    double member;
};

inline double Test::double explicit_inline( double input2 ) { return member; } //在类外定义函数时添加inline关键字,显示inline

      a) 定义在类内的成员函数是自动inline的

      b) 方法a没有做到接口和实现分离,使得类的声明看起来不够简洁,没有隐藏成员函数的实现细节,因此,通过在类外部定义函数的地方添加inline关键字实现显式inline。

2.3 将函数模板定义为inline的

inline关键字仍然放在返回类型之前,并且放在模板参数列表之后。

template <typename T> inline T max(const T&, const T&);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuyuelongfly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值