今日翻看《C++ Primer Plus》,看到一个陌生的东西--内联函数,立马前来记录一下。
为了明白内联函数和常规函数的区别,首先需要知道程序运行时,遇到常规函数时如何处理的:
编译过程的最终产品时可执行程序--由一组机器语言指令组成,运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址,计算机随后逐步执行这些指令。
常规函数调用的时候,使得程序跳到另一个地址,并在函数结束时返回。
然而内联函数的编译代码直接与其它程序代码发生了“内联”,也就是说,程序无需跳到另一个位置执行代码。因此其运行速度比常规函数快,但是需要有更多内存。
一图胜千言:

通常的做法是:将函数定义和函数原型写在一起放在main函数之前,前面加上关键字inline
例子如下:
- #include
- inline double square(double x){
- return x*x;
- }
- int main()
- {
- using namespace std;
- double a,b;
- double c=13.0;
- a=square(5.0);
- b=square(4.5+7.5);
- cout<<"a="<",b="<
- cout<<"c="<
- cout<<",c squared="<<square(c++)<
- cout<<"Now c="<
- return 0;
- }
运行结果:

可以看出,内联函数和常规函数一样,也是按值传参
内联与宏
inline工具是C++新增的特性。C语言使用预处理器语句#define提供宏——内联代码的原始实现,例如:
#define SQUARE(x) x*x
这并不是通过传参实现的,而是通过文本替换实现的
比如:b=SQUARE(4.5+7.5)会变成:b=4.5+7.5*4.5+7.5
为了解决,可以添加括号,即:
#define SQUARE(x) (x)*(x)
但仍有一个问题,比如传入c++的时候,会让c递增两次
所以如果使用C语言的宏执行类似函数的功能,应该考虑将其转换为内联函数
对于那些频繁使用且体量小的函数,内联函数是一个非常不错的选择!
-
相关阅读:
tensorflow学习1.3-创建会话,启动会话
[Node] Node.js Webpack打包图片-Js-Vue
【源码】数据可视化:基于 Echarts + Java SpringBoot 动态实时大屏范例 - 监管系统
Nginx Linux ubuntu离线安装部署教程
324. 摆动排序 II
软件项目管理文档模板目录
问题: 在Multisim中的 Tools»Show Breadboard,我找不到面包板视图的选项。
c# 前后台协同
Mybatis缓存
Vue渲染函数渲染html
-
原文地址:https://blog.csdn.net/m0_63222058/article/details/132741103