CPP--简单说一下什么是内联函数

263 阅读2分钟

前言

我们知道一些程序会反复的用到一些小函数,比如交换,加减等等。这个函数很小,但是又要多次使用。每次调用都要开辟函数栈帧,十分占用空间。我们有一种方式叫做用宏的方式进行展开。但是用宏又会产生各种各样的问题,例如我们要加上非常多的括弧来避免运算错误。在这种情况下我们引入了内联函数

什么是内联函数

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率。

inline void Swap(int& a, int& b)
{
	int tmp;
	tmp = a;
	a = b;
	b = tmp;

}

在这段代码中,如果主函数调用了这个函数,汇编代码中不是调用函数,而是直接展开,这样就可以少调用函数了。

特性

内联函数是一个用空间换取时间的用法,但是要注意的是

  • 如果这一段内联函数在一个循环,或者深度的递归使用,或者这个内联函数的代码很长,编译器就不会把它当作内联函数了,因为空间占用了太大了,编译器自动帮你优化了
  • inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会 找不到这个函数了。

宏的优缺点

优点就是可以复用代码,可以提升效率,缺点就是不方便进行调试,因为宏就是替换,而且不方便维护,容易造成代码的误用(就是要加很多的括弧)