-
-
[分享]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
赞赏
他的文章
[分享]C++基础十七-异常机制
7762
[分享]C++基础十六-模板
8114
[分享]C++基础十五-运算符重载
8157
[分享]C++基础十四-抽象类
7877
[分享]C++基础十三-多态
7608
看原图