一、内联函数的意义
在C++语言中,一般函数的调用都是程序将会跳转到函数的定义处执行函数体,然后返回结果给调用方,这样可以提高程序的执行效率。但是会增大函数调用的开销。像这种常见的函数适合,重复调用的次数多或者函数体实现比较复杂的程序中。
而在函数体不是很复杂,或者函数调用次数少的情况下。继续使用常见的函数方法,这样效率提升非常不明显,并且还会增大调用的开销,明显的付出与回报不成正比。而这时候内联函数就派上用场了。下面我们来介绍内联函数的用法,作用。
二、内联函数的作用及深层含义
首先我们要知道内联函数的关键字inline。
1.内联函数的实现
普通函数的实现
int Example(int a, int b)
{
int c = a + b;
return d;
}
内联函数的实现
inline int Example(int a, int b)
{
int c = a + b;
return c;
}
由上面的两段代码块,我们可以发现内联函数在实现上与普通函数的差异为多了个inline。
2.内联函数的运行过程
常见的函数的调用:
常见的函数的调用都是程序将会跳转到函数的定义处执行函数体,然后返回结果给调用方。如下:
function.h(声明)
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
int function(int a, int b);
funtion.cpp(定义)
#include"function.h"
int funciton(int a, int b)
{
int c = a + b;
return 0;
}
Test.cpp
#include"funciton.h"
int main()
{
int sum = function(2, 3);
return 0;
}
在Test中运行时调用function函数时会跳转到函数的定义处执行函数体,然后返回结果给调用方。
内联函数的调用:
内联函数的调用与普通函数有着很明显的区别,需要在调用处进行函数体的替换。如下:
functions.h(声明与定义尽量放在一起)
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
inline int functions(int a, int b)
{
int c = a + b;
return c;
}
Test.h
#include"funcitons.h"
int main()
{
int sum = functions(2, 3);
return 0;
}
此时调用function函数时就会直接展开function,而不是跳转。展开后的代码可能如下:
#include"funcitons.h"
int main()
{
int sum = 2 + 3;
return 0;
}
3.内联函数的代码位置
常见的函数一般是声明在function.h文件中,定义在function.c文件中。声明与定义分离。
内联函数虽然也可以声明与定义分离,但由于内联函数需要在调用处进行函数体的替换,因此通常建议将内联函数的声明和定义放在同一个头文件中,以便在每个调用处都能够进行内联替换。