今日翻看《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语言的宏执行类似函数的功能,应该考虑将其转换为内联函数
对于那些频繁使用且体量小的函数,内联函数是一个非常不错的选择!
-
相关阅读:
JS的事件委托(Event Delegation)
Java IO流概述和分类
【Flutter】Flutter Web 开发 如何从 URL 中获取参数值
快来手写RPC S2 序列化探究
计算机网络(五)——UDP
Python 自动化详解(pyautogui)
Spring @Configuration 和 @Component 区别
u盘损坏无法读取怎么恢复数据?
9. 内核、文件系统加载工具
你这个视频背景太假了?
-
原文地址:https://blog.csdn.net/m0_63222058/article/details/132741103