关闭

C++ inline

140人阅读 评论(0) 收藏 举报
分类:

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

猜你在找
深度学习基础与TensorFlow实践
【在线峰会】前端开发重点难点技术剖析与创新实践
【在线峰会】一天掌握物联网全栈开发之道
【在线峰会】如何高质高效的进行Android技术开发
机器学习40天精英计划
Python数据挖掘与分析速成班
微信小程序开发实战
JFinal极速开发企业实战
备战2017软考 系统集成项目管理工程师 学习套餐
Python大型网络爬虫项目开发实战(全套)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5270次
    • 积分:305
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类