C++的内联函数

在C++中,函数的调用会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放的内存地址中,待函数执行完后,再返回到执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,返回后先要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率问题更为重要。引入内联函数实际上就是为了解决这一问题。

比如下边代码:
#include <iostream>
using namespace std;

void echo(char x){cout<<x<<endl;}

int main()
{
    echo('A');
    return 0;
}

在main函数中执行echo函数时,程序需要跳转到echo函数所在的内存地址中执行,结束后再回到main函数中,这就影响到了效率,考虑函数体不大,于是我们引入了内联函数(函数定义时加inline关键字):
#include <iostream>
using namespace std;

inline void echo(char x){cout<<x<<endl;}

int main()
{
    echo('A');
    return 0;
}

这样在程序编译时,所有调用echo的地方都被替换成了echo函数体,因而在程序执行阶段,就不用跳来跳去的执行了。

另外,所有在类内定义的函数都是内联函数:
#include <iostream>
using namespace std;

class Mzwu
{
public:
    void AA(){cout<<"AA()"<<endl;} //隐式内联函数
    inline void BB(){cout<<"BB()"<<endl;} //显式内联函数
    void CC();
};

inline void Mzwu::CC() //类定义体外声明为内联函数
{
    cout<<"CC()"<<endl;
}

注意:由于内联函数是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过大,某些编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了,所以,内联函数的函数体代码不宜过大,一般就是3-4行代码即可。

上一篇: 补码的作用
下一篇: C++的类
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 0 | 引用: 0 | 查看次数: 3491
发表评论
登录后再发表评论!