C++ 内联函数inline

来源:互联网 发布:c语言编程实战宝典 编辑:程序博客网 时间:2024/06/06 19:36

1. 内联函数的作用

inline 和 宏定义#define的作用基本类似,都是替换或者展开。 在程序编译阶段,如果遇到内联函数,则将内联函数的实现在当前位置展开。内联的目的是为了减少函数的调用开销,从而提高运行效率,但会增加代码体量。

注意: 内联只是一种建议,并不要求编译器必须执行。如果内联函数本身开销较大(含有for,switch,递归等),编译器可能拒绝内联展开。

2. 内联函数的实现

内联函数的实现比较简单,即在 函数定义体 前加上“inline”关键字。

注意: 仅在函数声明前加上 “inline”是不起作用的,必须加在函数定义体前。

比如,下面的实现就是无效的:

inline int add(int a, int b);int add(int a, int b){    return a + b;}

3. 内联函数的优缺点

优点:

(1)通过避免函数的回调,加速了程序的执行;

(2) 通过利用指令缓存,增强局部访问性;

(3)使用内联可以替换重复的短代码,方便代码管理;

缺点:

(1) 由于是替换展开,因此会增大代码体量;
(2)一旦修改内联,所有用到该内联的地方都需要重新编译;

4. 内联函数的使用场景

(1)需要提高程序运行效率;

(2)需要用内联替代宏定义来实现某些功能;

(3)在类中声明同时定义的成员函数,自动转化为内联函数,如果需要隐藏该函数的实现细节,则在类外定义内联;

5. 内联函数与宏的区别

(1)内联函数可调试,而宏定义不行;

(2)内联函数首先是函数,函数的很多性质都适用于内联函数,如:内联函数可以重载;编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;

(3)内联函数可以访问类的私有成员变量,宏定义则不能;

原创粉丝点击