一、引入内联函数的缘由 函数
引入内联函数的目的是为了解决程序中函数调用的效率问题。通常状况下,函数调用会带来下降效率的问题,由于调用函数时其实是将程序执行顺序转移到函数内存中所在的某个地址。将函数的程序内容执行完后,再转回到转去执行该函数前的地方。函数调用会有必定的时间和空间方面的开销,会影响效率。引入内联函数就是为了解决这一问题。 spa
在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行更换,这样不会产生转回转去的问题,但会增长目标程序的代码量,进而增长空间的开销。可见,它是以目标代码的增长为代价来换取时间的节省(空间换时间)。 递归
二、内联函数的定义方法 内存
在函数定义的前面加上inline关键字。 get
eg: inline int max (int a, int b){ 编译器
return (a > b? a: b); 编译
} class
三、使用内联函数的注意事项 效率
(1)在内联函数中不准与使用循环语句、开关语句和递归调用,不然按非内联函数处理 循环
(2)内联函数的定义必须出如今内联函数第一次调用以前
(3)在类结构中全部在类说明内部定义的函数都是内联函数
四、类中的内联函数
类的成员函数分为内联函数和外联函数。内联函数是指那些定义在类体内的成员函数。说明在类体内,定义在类体外的成员函数叫作外联函数。
内联函数与带参数的宏定义的执行效率是同样的,可是内联函数要优于宏定义,由于内联函数遵照函数的类型和做用与规则。
让外联函数变成内联函数只需在函数头前面加上 inline 关键字
举一个例子:
class A
{
public:
A( int x, int y)//内联函数
{ X = x; Y = y};
int getX ()//内联函数
{ return X;}
int getY()//内联函数
{return Y;}
int sum();//外联函数
int max();//外联函数
private:
int X,Y;
};
int A::sum(){
return(X + Y);
}
inline int A::max(){ // 加了 inline 后变成了内联函数
return (X > Y ? X : Y);
}