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

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 15:14   42   0

【概念介绍】

内联函数是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++。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP