现在的位置: 首页 > 综合 > 正文

内联函数与宏定义

2013年10月17日 ⁄ 综合 ⁄ 共 902字 ⁄ 字号 评论关闭

一、宏的优缺点。

      程序调用宏的时候,只是在宏预处理的地方把代码展开,不需要像函数调用那样,必须在调用前保存现场,调用后恢复现场,需要一定的空间和时间。因此宏调用更具效率。

      但是宏也有很多的不尽人意的地方。
        1、宏不能访问对象的私有成员。
        2、宏的定义很容易产生歧义。

 

二、内联函数不仅保留宏的优点,还进一步完善了宏的缺点。

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

      用法:

             1、内联函数必须是和函数体的实现在一起定义。

             2、内联函数如果过大,就失去了意义了,跟一般函数调用效率就一样了,因此一般用于简单的类读写操作。

      例:

           Class CTest{

                     private:

                               int nNum;

                     public:

                               int Add(){ return nNum++;}// 是内联函数,不管有没有加“inline”关键字

                               inline int Sub(){return nNum--;}// 是内联函数

                               inline int GetNum();// 不是内联函数,不管是否加了“inline”关键字

            };

           但是如果在类的实现部分添加“inline”关键字,则该函数就是内联函数:

                               inline CTest::GetNum(){return nNum;}// 是内联函数

 

抱歉!评论已关闭.