C++ inline

原创 2016年03月05日 20:35:01

在阅读别人的开源源码时,经常发现一些函数前加了关键字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

C++inline函数简介

1.inline函数简介 inline函数是由inline关键字来定义,引入inline函数的主要原因是用它替代C中复杂易错不易维护的宏函数。 2.编译器对inline函数的处理办法 inl...
  • K346K346
  • K346K346
  • 2016年07月31日 22:39
  • 3940

C语言inline详细讲解

C语言inline详细讲解 原帖链接:http://www.cnblogs.com/cnmaizi/archive/2011/01/19/1939686.html 本文介绍了GCC和C99标准中in...
  • force_eagle
  • force_eagle
  • 2013年09月05日 09:19
  • 3431

类成员声明与定义前加inline的区别(C++ inline 函数)

转载自:http://www.cnblogs.com/berry/articles/1582702.html 参考:http://msdn.microsoft.com/zh-cn/library/wi...
  • fengzizhuang
  • fengzizhuang
  • 2014年03月18日 20:34
  • 2545

C++那些细节--inline关键字

inline是个好东西,不过要注意不能乱用。在项目中看到过许多inline相关的宏定义,_forceinline,_inline等等,有许多有疑惑的地方。于是,本人强迫症发作,决定总结一下inline...
  • puppet_master
  • puppet_master
  • 2015年09月20日 19:23
  • 1765

【C++】尽量以const,enum,inline 替换 #define

尽量以const,enum,inline 替换 #define
  • Tanswer_
  • Tanswer_
  • 2017年04月29日 16:23
  • 935

C++中inline与函数调用

转自:http://blog.csdn.net/kekuixiong/article/details/6652254 转自:http://www.cnblogs.com/yitianke/p/331...
  • Lee_Shuai
  • Lee_Shuai
  • 2016年11月19日 11:40
  • 615

c++ inline的作用。

inline函数 我们看下面的函数,函数体中只有一行语句:      double Average(double total, int number){        return total/...
  • sinat_25827781
  • sinat_25827781
  • 2015年02月04日 17:59
  • 119

C++内联函数(Inline)介绍

C++内联函数(Inline)介绍2001-11-12 09:34作者:杜瑾出处:yesky责任编辑:方舟  介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用...
  • shuiyingzi5
  • shuiyingzi5
  • 2011年02月15日 23:46
  • 302

浅析c++中的内联函数(关键字inline)

常规函数:执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈,跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的指令处。来回的跳跃,需要一定的开销。...
  • wangshubo1989
  • wangshubo1989
  • 2015年10月17日 01:18
  • 3999

小问题大思考之C++里的inline函数

inline,一个神奇的关键字。有了它,函数,你同时就可以获取函数和宏的优点。inline定义的函数,比起没有inline的函数来说,没有执行函数调用所带来的负担(对此可参见《C++程序的内存布局》)...
  • imyfriend
  • imyfriend
  • 2013年10月13日 11:51
  • 7965
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ inline
举报原因:
原因补充:

(最多只允许输入30个字)