C++ 语法篇之 Inline函数

1. 节省开销

为了方便理解Inline的优势,先介绍一下函数调用的主要过程:

  1. 将参数推到堆栈。
  2. 将返回地址推到堆栈中。
  3. 在被调用函数中,准备函数的返回值。
  4. 将调用函数时推入堆栈的参数和返回地址推出。

以上的调用步骤不需要完全理解,只需记住函数调用会给CPU带来一定的开销,而这些开销可以通过Inline函数缓解。因为不同于普通的函数调用,Inline函数在编译过程中会把函数中的代码直接插入正文位置,从而能减少传参和返回的开销,提升程序运行的效率。下边我们进入正文。

2. Inline函数介绍

2.1 Inline函数的定义

Inline函数(翻译为内联函数的定义:一种编程语言结构,用来建议编译对一些特殊函数进行内敛扩展;也就是说建议编译器将指定的函数体插入并取代调用该函数的地方,从而节省了每次调用函数带来的额外时间开支。(摘自维基百科)

乍一听,这个所谓的内联函数跟之前C中经常使用的宏有很相似,但在实际使用上还有有巨大区别的。与宏定义不同,Inline函数还具有函数的参数类型检查,以及编译检查。

2.2 Inline函数的写法

在函数的声明(定义)前加上 Inline 关键字即可把函数变为Inline函数。如下变的plusOne函数。

#include <iostream>
inline int plusOne(int t){return ++x;};
int main(){
    int a = 1;
    cout << "a= "<< plusOne(a) << endl; 
    //上边的语句等效为:cout << "a= "<< ++a << endl; 
    return 0;
}

对于类的成员函数中,只需在头文件中写出Inline函数的声明和定义即可。下边的例子中,setColor和getColor便是Ball类的Inline成员函数,相当于直接读/写成员变量color。

class Ball{
    int color;
public:
    Ball(){}
    ~Ball()
    inline void Ball::setColor(int a){ this->color = a };
    inline int Ball::getColor(){ return this->color };   
};

3. Inline函数的使用

Inline的优点是提升代码执行效率,但同时会造成代码量的增加,是一种以空间换时间的权衡。但是在大多数场景,空间不会是问题。另外,Inline与宏相比更加安全,所以在C++中应该尽量使用Inline来替代宏的使用。

Inline or not?

建议使用Inline函数的场景:

1. 函数 2-3行。

2. 频繁被调用的函数,比如在循环中。

反之,如果函数超过20行,或者有递归调用的话,是不建议使用Inline函数的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值