初识C++ (四)
创始人
2024-04-02 16:01:26
0

作者:@小萌新
专栏:@初阶c++
作者简介:大二学生 希望能和大家一起进步!
内容简介: 本篇博客会简单的介绍内联函数
在这里插入图片描述
最好的都会在路上等着你

初识C++

  • 多次函数调用的缺陷
    • C语言解决方案
    • C++给出的解决方案: 内联函数
      • 概念
      • 运行
    • 内链函数的注意点
      • 1 内链只是建议
      • 2. 优缺点
      • 3. 不能声明定义分离
  • C++中替代宏的手段
  • 总结

多次函数调用的缺陷

我们先来看代码

int Add(int x, int y)
{return x + y;
}int main()
{int ret = 0;ret = Add(2, 3);ret = Add(2, 3);ret = Add(2, 3);ret = Add(2, 3);ret = Add(2, 3);ret = Add(2, 3);ret = Add(2, 3);ret = Add(2, 3);return 0;
}

根据我们在函数栈帧这节课中学到的知识

这样子调用函数有什么缺陷?

在这里插入图片描述

这是是不是会频繁的调用函数栈帧啊

C语言解决方案

这里c语言中是不是给出了一种解决方案 叫做

我们来尝试用宏改写下这个函数

#define ADD(x,y) ((x)+(y))

这样子

注意 这里有很多不注意宏的写法的同学会出现各种各样的错误

比如说宏内部写成 int x int y

又或者说 忘记在x y以及x y的运算上加括号

写成宏定义之后就能减少函数栈帧的调用 从而提高一定的效率了

C++给出的解决方案: 内联函数

概念

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调
用建立栈帧的开销,内联函数提升程序运行的效率。

还是以我们上面的ADD函数为例

我们在c++程序中可以这么写

运行

inline int Add(int x, int y)
{return x + y;
}

在这里插入图片描述

我们首先先来看看最后结果怎么样

转到汇编代码

在这里插入图片描述
我们发现在执行ADD宏的时候并没有call建立新的函数栈帧

那我们再来看看内联函数的

在这里插入图片描述
我们发现 咦 这里怎么call了一个Add函数啊

在这里插入图片描述
这是因为这里 我们需要开一下内链的优化

不然会系统默认不会使用内链函数

内链函数的注意点

1 内链只是建议

你敲出这么一行代码

inline int Add(int x, int y)

并不是说编译器就会使用内联函数了

它会有一个自己的判断

也就是说 你的这一行命令只是起到建议作用

2. 优缺点

inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会

用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运

行效率。

缺点很好理解 函数展开了目标文件自然就变大了

优点也是 没有栈帧的调用了 那么效率自然也就提升了

3. 不能声明定义分离

inline不建议声明和定义分离,分离会导致链接错误。

那么这是为什么呢?

因为在使用inline之后 函数就会被展开

那么这样子是不是就没有函数地址了啊

所以说就找不到了

C++中替代宏的手段

  1. 常量定义 换用const enum
  2. 短小函数定义 换用内联函数

简单介绍下

比如说我们想定义一个常量N = 10

在c语言中可以这么定义

  #define N 10

但是在我们的C++中就可以这么定义

 const int N = 10;

这样子就成功替换了宏的使用

而对于函数来说 使用内联函数来替换宏上面已经介绍过了

总结

在这里插入图片描述

本文简单介绍了内联函数 对比了内联函数还有宏
由于博主的水平有限所以难免博客中会出现纰漏 希望大佬们看到之后可以即使指正
最后如果这篇博客帮助到了你 别忘了一键三连啊
阿尼亚 哇酷哇酷!

相关内容

热门资讯

国信证券:企业年金政策将合规执... 证券之星消息,国信证券(002736)12月29日在投资者关系平台上答复投资者关心的问题。 投资者提...
灵宝综治中心调解一起跨度近两年... 大象新闻记者 许继彬 通讯员 王建敏 李婕霄 校园安全无小事,少年成长总关情。孩子在校园内的意外磕碰...
著名经济学家魏杰:“十五五”时... 封面新闻记者 欧阳宏宇 “推动制度型开放,形成高质量的开放新格局,是“十五五”时期开放的重点。”12...
子洲县市场监管局举办法律法规专... 12月24日,子洲县市场监督管理局举办法律法规专题培训会,邀请子洲县人民法院法官王斐、钟鹏程作专题授...
董毅智律师:小红书沦为诈骗“温... 12月23日,丽江市古城区文化和旅游局采取一项公开举措,向小红书平台发出公函,指出其未能有效履行平台...
衡水办学神话破灭!原因“政策”... 衡水办学神话破灭!原因“政策”! 撰文|@渤海公子 最近有一张图,很有意思。 它没被大肆转发,却在很...
欣旺达子公司涉买卖合同纠纷 动... 中证报中证网讯(记者 齐金钊)日前,锂电池行业头部企业欣旺达全资子公司欣旺达动力科技股份有限公司,因...
欣旺达被吉利系公司起诉索赔23... 12月26日,欣旺达发布公告,其子公司欣旺达动力被吉利控股集团旗下的核心三电企业威睿电动提起诉讼。威...
北斗定位厘米级精准 哈尔滨工程... 中新网哈尔滨12月29日电 (董昕瑶)28日,来自哈尔滨工程大学18个学院的1200余名师生铲雪塑形...
马杜罗:美国威胁委内瑞拉人民是... 新华社加拉加斯12月28日电(记者田睿 刘宇辰)委内瑞拉总统马杜罗28日表示,美国威胁委内瑞拉人民是...