【C++】内联函数——以“嵌入”代替“调用”

【概念介绍】

内联函数是C++为提高程序运行速度而做的一项改进。

首先了解代码运行的原理:

         编译——产生可执行文件(里面全是二进制机器指令)

         运行——将二进制机器指令加载到内存,每个函数有自己的内存位置。调用函数时,程序将跳转到另一个地址(函数地址),调用完函数之后再跳转回去。在内存中来回跳跃需要一定的开销。

         内联——在编译时,将内联函数的二进制代码直接嵌入到调用的地方。好处是不需要跳转,速度快;坏处是占用更多的内存。(如果程序在10个不同的地方调用同一个内联函数,则该程序将包含函数的10个二进制副本。)

         所以,内联适合函数体短小调用次数多的函数。

 

【使用方法】

         ①加上关键字inline

         ②将整个定义写在声明的地方(如果函数体有多行,说明可能函数体太长,不适合内联)

inline int square(int x) { return x*x; }

 

【注意事项】

         ①程序员请求inline,但编译器不一定会实行,有可能编译器注意到函数太长

         ②递归的函数不能内联(编译时无法得知调用多少次,所以不知道要嵌入多少份)

 

【内联与宏】C++的内联功能远胜于C的宏定义

 

//内联函数

inline int square(int x){ return x*x; }

 

//宏定义函数

#define SQUARE(X) X*X

 

内联函数使用上与函数一样,宏定义则只是简单的替换,如:

SQUARE(12)

正常

SQUARE(v1 + v2)

v1 + v2 * v1 + v2      运算次序错误

SQUARE(a++)

a++ * a++            自增了两次

如果使用C语言的宏实现了类似函数的功能,应考虑将其转为C++。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值