内联函数
内联函数是为了使调用函数时达到和宏定义形同的功能,之所以不直接使用宏定义是因为宏定义是预处理器来执行命令的,而不是编译器。而预处理器只是就行简单的内容替换,没办法进行语法分析,所以使用了内联函数来解决这个问题。
内联函数是使用inline关键字声明的函数,也叫内嵌函数,它主要的作用是解决程序的运行效率。
内联函数的优缺点
优点:
内联函数并不会像其他函数一样新建栈,它只会将代码展开。这样我们在使用内联函数时就不用再call函数的地址然后跳转到函数所在栈区,因此产生了一个很好的优势:运行效率将大大增加。
缺点:
因为内联函数会在使用它的地方将代码展开所以在汇编层面程序的代码量就会增加,造成代码膨胀
由于内联函数在调用的时候将代码展开了这样就直接暴露出了函数体,这样很容易造成函数功能暴露。
内联函数的具体执行过程
#include<iostream>
using namespace std;
inline void MyCout(int m)
{
cout << m<< endl;
}
int main()
{
MyCout(10);
system("pause");
return 0;
}
可以看出:
函数直接在调用它的地方展开了,这样每调用一次就展开一次就会导致在编译代码时造成代码的大量膨胀,生成的执行程序的体积也会随之增加。
内联函数的使用
我们可以在一个函数的前面加上inline来使用内联函数,但这只是对编译器的一种建议,编译器会根据函数的具体情况决定是否使用内联函数。
内联函数有两种用法:
1.类成员内部的内联函数
对于类内部结构简单的成员函数,即使不主动用inline声明也会自动将它当作内联函数
对于内类声明,类外实现的成员函数则必须加上inline才有可能会成为内联函数。
2.类外面的全局内联函数。
如果想将类外的一个全局函数转化为内联函数需要在函数前加上inline关键字。