在C++程序中符合下列条件的函数为内联函数:
1. 函数说明前冠以“inline”关键字的函数
2. 类内定义的函数成员
将函数体短小而又频繁调用的函数说明为内联函数可以提高程序运行效率。
利用编译预处理的宏定义方式(#define)也可以实现类似于内联函数(inline)的功能。不过,内联函数的方式更为方便和可靠。
inline int MAX(int a, int b) { if(a > b) return a; return b;}
#define MAX(a, b) { (a > b) ? a : b}
虽然带参数的宏定义的功能与对应的内联函数基本一致,但仍然是有差别的:宏定义中的参数和计算结果没有类型说明,编译时不可能进行类型检查,是不安全的,更无法区分赋值参数和引用参数,很容易出错。
因此,C++语言的编程中,当某段程序短小而又经常被重复时,建议采用内联函数,少用宏定义实现。
举一个宏定义容易出错的例子:
#define f1(x) x*x
#define f2(x) (x)*(x)
#define f3(x) ((x)*(x))
int a=3, b=4, c=16;
cout<<f1(a+1);
cout<<f2(a+1);
cout<<c/f2(b);
cout<<c/f3(b);