文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++浅析内联函数的使用

2024-04-02 19:55

关注

一. 概念

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

在C++里为了提高效率使用内联函数,可是我们会发现在C语言里面已经有了宏,也可以处理关于这个效率的问题,那为什么还会出现内联函数呢?

当我们要写一个Add的宏时:

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

但是也有人可能会写错,出现下面这些情况,比如:

#define Add(x, y) return x + y ; 
#define Add(x, y) return (x + y);
#define Add(x, y) return (x + y)
#define Add(x, y) x + y
#define Add(x, y) x + y;
#define Add(x, y) (x + y);
#define Add(x, y) (x + y)

以上这些都是有可能会出现的情况,既然这么容易写错,于是乎C++就出现了内联函数,就是为了解决宏函数晦涩难懂,容易写错的问题

那么如何查看内联函数呢?

我们知道宏是不支持调试的,但是内联函数是支持调试的,那内联函数怎么支持调试的呢?其实内联函数在debug版本下是不会展开的,如图:

但是release版本下又看不到汇编代码,为了能查看内联函数,我们需要更改一些设置提高优化等级,在debug模式下,需要对编译器进行设置,否则不会展开,因为debug模式下,编译器默认不会对代码进行优化,以下给出vs2019的设置方式,如下图:(这里由于疏忽忘记在函数前加上inline,记得加上并重新编译以后在调试状态下转到反汇编查看)

这些配置好了以后再次查看汇编代码:

我们就会发现这里不再call函数了,说明没有建立函数栈帧,而是直接展开了,inline起作用了这里

二. 特性

声明和定义分离以后会报链接错误:

回顾:

宏的优缺点?

优点:

1.增强代码的复用性。

2.提高性能。

缺点:

1.不方便调试宏。(因为预编译阶段进行了替换)

2.导致代码可读性差,可维护性差,容易误用。

3.没有类型安全的检查 。

扩展:

C++有哪些技术替代宏?

1. 常量定义 换用const

2. 函数定义 换用内联函数

到此这篇关于C++浅析内联函数的使用的文章就介绍到这了,更多相关C++内联函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯