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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Poedu_C++_Lesson02_2_20161220_重载、默认实参、inline、类型转换、引用

重载(续)、默认实参、内联函数(inline)、类型转换、引用

改善C++ 程序的150个建议学习之建议25:尽量用const、enum、inline替换#define

建议25:尽量用const、enum、inline替换#define 在建议4中,我们已经详细说明了在使用宏时应注意的一些问题。“表面似和善、背后一长串”绝对是对宏的形象表述。宏的使用具有一些优点:...

【转】inline在C++中的作用

介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如#define TABLE_COMP(x) ((x)>0?(x):0) ...

C++ inline 函数

(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。       inline int min(int...

C++ inline 内联函数

C++ inline内联函数是一种提高程序执行效率的一种特性。

C++中的inline用法

一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。   表达式形式的宏定义一例:   #define ExpressionName(Var1,Va...

C++中的inline函数

背景 在C&C++中 一、inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define Expres...

C++ inline函数 内联函数

C++ inline函数 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****...

c++ inline函数

(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。       inline int min(in...

C++ inline constexpr 内联函数和常量表达式函数问题

函数问题 一)inline: 内联函数,就是相当于把被调用的函数硬嵌入调用它的函数中去,不用保存栈,所以速度快。 1. 要使inline起作用,必须是inline函数定义(不但是声明)在其调用函数范围...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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