首页
社区
课程
招聘
[分享]C++基础六-内联函数
2021-8-25 16:06 4509

[分享]C++基础六-内联函数

2021-8-25 16:06
4509

什么是内联函数

函数是一个可以重复使用的代码块,调用函数会产生时空开销。程序在执行一个函数之前需要做一些准备工作,先将参数、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码。执行完函数体后还要清理栈,将之前压入栈的数据都出栈。如果函数体代码比较多,需要较长的时间开销,那么函数调用机制占用的时间可以忽略不记;如果函数体代码很少,功能简单,那么大部分时间都花在了函数调用机制上,显然是不划算的。
为了消除简单函数调用的时空开销,C++提出了一种提高效率的方法,在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function)。

内联函数的用法

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
inline int Max(int a, int b)
{
    return a > b ? a : b;
}
 
int main()
{
    cout << "max(a,b)=" << Max(8, 9) << endl;
    return 0;
}

在函数返回类型前加上inline关键字用来指定内联函数。需要说明的是,对函数作inline声明只是程序员对编译器提出的一个建议,不是强制性的,编译器会根据具体情况判断是否使用内联函数。
当函数比较复杂时,函数调用的时空开销可以忽略,所以我们一般是将非常短小的函数声明为内联函数。
由于内联函数比较短小,我们通常的做法是省略函数原型,将整个函数定义放在本应该提供函数原型的地方,或者直接放在头文件中。

内联函数和宏定义函数区别

  • 内联函数在编译时展开,而宏在预编译时展开。在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。
  • 内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能。inline是函数,宏定义不是函数。
  • 宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。

github:https://github.com/0I00II000I00I0I0

bilibili:https://space.bilibili.com/284022506


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回