内联函数

函数调用需调转到函数所在的地址,而内联函数直接将相应的代码替换函数调用,运行速度比函数快,但是需要占用更多的内存,内联函数不能递归,有些编译器可能也没有启用或者实现这种特性

  • 在函数声明前加上关键字 inline
  • 在函数定义前加上关键字 inline

通常做法是省略原型,将整个定义(即函数头和所有函数代码)放在本应提供原型的地方

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

using namespace std;

inline double square(double x) {return x*x};

int main()
{
double a;
a = square(6.0);
return 0;
}

不同于 c 语言的宏,内联函数是和函数一样进行值传,而宏是通过文本替换实现

1
2
3
#define SQUARE(X) X*X
a = SQUARE(5.0); // is replaced by a = 5.0 * 5.0;
b = SQUARE(4.5 + 7.5) // is replaced by b = 4.5 + 7.5 * 4.5 + 7.5;

所以上面两个语句只有第一个是正确的,除非改成 #define SQUARE(X) ((X)*(X))