为什么使用内联函数
在C中,我们经常将一些短而执行频繁的函数写成宏的形式,这会减小函数调用的开销,从而提高效率,但这经常会出现一些难以发现或者无法解决的问题。在C++中使用宏定义会出现一个问题,预处理器不允许访问类的成员,即预处理宏不能作为类成员的函数。为了解决这一问题,从而引入了内联函数,使得能够在类中访问自如。使用宏所出现的问题
1°简单问题如下:
#include <iostream>
#define ADD(a,b) a+b
int main(void){
int a = 1;
int b = 2;
cout<<ADD(a,b)*5<<endl;//结果为11
//实际上为cout<<a+b*5<<endl;这将无法达到我们所需要的(a+b)*5的预想。
/**
* 解决方法为:#define ADD(a,b) (a+b)
*/
}
2°难题如下:
#include <iostream>
#define MAX(a,b) a>b?a:b
int main(void){
int a = 1;
int b = 2;
cout<<MAX(++a,b)<<endl;//结果为3
//原因为:++a>b?++a:b,这里先执行了两次a+1,在进行比较
/**
* 此时若按上题方法,改为#define MAX(a,b) (a)>(b)?(a):(b)
* 会发现结果还是3,所以这个问题难以解决,但是用内联函数将轻松解决
*/
}
内联函数解决如下:
#include <iostream>
inline int MAX(int a,int b){
return a>b?a:b;
}
int main(void){
int a = 1;
int b = 2;
cout<<MAX(++a,b)<<endl;//此时结果为2
}