C++ inline

在阅读别人的开源源码时,经常发现一些函数前加了关键字inline,上网查了下,这是内联函数的声明方式。
其主要的特点省去函数调用的开销,提高代码执行效率。
为什么能省去函数调用的开销?内联函数是以复制代码为代价来提高效率的,也就是在程序编译阶段,注意是在程序编译阶段,把内联函数体复制到调用点的函数体中,所以就省去了函数调用的开销。既然有复制函数体,所以有几点需要注意。

inline int max(int vA, int vB)
{
    return vA > vB ? vA : vB;
}
  1. 内联函数体不易过长,不然占用内存空间
  2. 应避免内联函数的执行时间过长,比如for等循环语句,因为虽然能省去函数调用开销,但是与执行时间相比,是得不偿失
  3. 内联函数应放在头文件中,避免多次#include带来的函数重定义
  4. 内联函数是针对函数定义的关键字,而不是声明的关键字,所以inline 的函数接着是函数的实现
class CMyInline
{
public:
    CMyInline(void){}
    ~CMyInline(void){}

    int getNum()const {return m_Num;}
private:
    int m_Num;
};

我们可以给函数加上inline关键字,但是编译器有权决定他是不是内联函数,其原则就是代码块长短,执行时间,开辟空间等。而在类中,除开模板函数,函数的实现体通常是放在cpp中。而get,set函数的实现通常写在函数类中,因为编译器默认会给类的成员函数添加inline。

  1. inline函数中不包含static关键字,因为有可能出现多个相同的static变量,是不被允许的。
  2. inline虚函数是无效的,因为inline是程序编译时间确定,而虚函数是运行时间阶段确定。
  3. 类的构造函数和析构函数不是inline的选择,因为其本身类可能函数体是简单的,但是父类的函数体可能存在复杂的情况,所以通常编译器不会认为构造函数和析构函数是inline函数。

【参考资料】
【1】http://www.cnblogs.com/berry/articles/1582702.html
【2】http://blog.csdn.net/imyfriend/article/details/12676229

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值