内联函数与宏

,我们有时会定义一些预处理宏,如

#define COMP(x) ((x)>0?(x):0) 就定义了一个宏。

使用宏的原因是——函数调用有一定的时间和空间开销(在函数调用的使用程序跳到函数所在内存中的地址,执行完之后再跳回原来的位置继续执行。这种转移需要保存现场并记忆当前内存位置,执行完函数之后再恢复现场),而宏只是在预处理的地方把代码展开,不需要额外的时间空间开销,因而提高了效率。

内联函数,使用Inline来定义,在类的内部定义了函数体的函数被默认为内联函数。

内联函数在C++类中,应用最广的,应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。读写就必须使用成员接口函数来进行。如果我们把这些读写成员函数定义成内联函数的话,将会获得比较好的效率。

Class Test{

 

 Private:

 

  Int test;

 

 Public:

 

  Int getTest(){ return test;}

 

 Void setTest(int t) {test=t;}

 

}

 

内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。

当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。

摘抄自http://blog.csdn.net/longjing1113/article/details/8807671

 

posted @ 2014-09-10 15:52  李哲操的博客  阅读(565)  评论(0编辑  收藏  举报