c++内联函数inline

news2024/7/6 19:32:17

目录

内联函数的概念:

内联函数的用法:

内联的优点:

内联的缺点:

内联的使用场景

内联注意事项:


内联函数的概念:

C++中内联(inline)是一种关键字,用于告诉编译器把函数的代码嵌入到调用该函数的地方

当C++程序使用内联时,编译器会将内联函数的代码复制到每个调用该函数的地方,在编译时进行代码替换,从而消除函数调用的开销。与宏的功能类似。


内联函数的用法:

内联函数的定义一般使用`inline`关键字,定义格式如下:

其中,inline 指定这个函数是内联函数,在编译时会将该函数的内容嵌入到调用它的位置处,返回类型和参数列表与普通函数相同。

下面是一个简单的内联函数示例:


在上述代码中,`max()`函数被声明为内联函数,并在`main()`函数中进行了调用。在编译时,调用该内联函数的语句将被替换为函数的实际代码,从而提高程序执行效率。


内联的优点:

内联函数的优势主要有以下几个方面:

1. 函数调用开销更小:由于内联函数的代码会被直接插入到调用它的地方,所以不需要进行函数调用,对程序性能有一定的提升。

2. 代码更加省空间:使用内联可以避免生成大量的函数调用代码,从而使可执行文件的大小更小。

3. 快速响应:内联函数没有函数调用的开销,因此可以快速响应短小集中的功能需求。

4. 编译器优化:内联函数可能会被编译器优化为一些更高效的代码,比如省略参数传递、去掉局部变量等,这样也可以提高程序的运行速度。


内联的缺点:

内联函数也存在一些缺点,主要包括以下几个方面:

1. 可读性下降:内联函数代码嵌入到调用处,可能会导致代码可读性下降,特别是对于较长的内联函数而言。

2. 代码膨胀:内联函数在多个地方都被调用时,可能导致代码重复,从而增加了程序大小,增加了代码维护和修改的复杂度。

3. 编译时间增加:由于内联函数的代码需要在编译期间进行展开替换,因此,当内联函数非常大或在多个不同的源文件中多次使用时,会导致编译时间显著增加。

4. 适用场景有限: 内联函数的使用场景比较局限,它适合用于代码量少、短小精悍的函数调用。对于递归函数、循环语句等需求展开的函数不适用于内联。


内联的使用场景

内联函数适合用于以下一些场景:

1. 对性能有苛刻的要求:在对程序性能要求较高的情况下,使用内联可以减少函数调用开销,提高程序的响应速度。

2. 简单短小的函数:内联函数适合用于简单短小的函数,这样可以避免对函数调用带来的额外开销。

3. 经常被调用的函数:如果某个函数被频繁地调用,使用内联可以避免过多的函数调用开销,提高程序性能。

4. 模板和类中的函数:在模板或者类中定义函数的时候,如果希望代码更高效、代码量更少,则可以使用内联函数。

内联注意事项:

1.与普通函数不同,内联函数必须在函数定义处进行定义,不能在单独的文件中定义。此外,内联函数不能包含递归调用和循环语句,因为这些操作难以被展开。

2.内联inline只是给编译器的建议,当内敛函数中代码过多时,编译器可能不采用内联。

3.对于特别小的函数,编译器可能会自动将其转换为内联函数,而不需要手动添加`inline`关键字。一般来说,函数体代码量较小(通常小于10条指令),且函数被多次调用,都是内联函数应用的好场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以太网和DNS

以太网 数据链路层考虑的是相邻俩个节点之间的传输(通过网线/光纤/无线直接相连的设备),数据链路层中最典型的协议就说"以太网" 以太网协议规定了数据链路层,也规定了物理层的内容,我们使用的网线,也叫做"以太网线"(遵守以太网协议的网线) 以太网帧格式…

使用RecyclerView开发TabView

github链接 demo代码 效果图 这个功能是使用RecyclerView开发的,需要解决下面这些问题 单个item滚动的问题:左边的view需要固定、手指松开之后,惯性的处理滑动布局子View事件分发冲突的解决多个item联合滚动滚动header解决itemView与Recycl…

【MYSQL】表的增删改查(进阶)

文章目录 🌷 1. 数据库约束⭐ 1.1 约束类型⭐ 1.2 NULL约束⭐ 1.3 UNIQUE:唯一约束⭐ 1.4 DEFAULT:默认值约束⭐ 1.5 PRIMARY KEY:主键约束⭐ 1.6 FOREIGN KEY:外键约束⭐ 1.7 CHECK约束(了解) …

实在智能创意沙画引爆第25届“海博会”,数字员工为电商超自动化转型加“数”

4月18日,由中国纺织工业联合会、中国服装协会、中国服装设计师协会、台湾纺织业拓展会主办,石狮市人民政府指导的第二十五届海峡两岸纺织服装博览会暨科技成果交易会(下称“海博会”)在石狮市举行。本届海博会以“融合创新、共享时…

Android Jetpack 应用指南 - Navigation

前言 在Android开发的过去几年中,在公司的项目中一直没有机会尝试单Activity多Fragment的开发模式,随着Google推出Navigation组件,我意识到,终于有机会学习一种全新的开发模式了。 与上一篇文章相同,本篇同样是Navig…

Lenovo IdeaPad S540-14IML 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件型号驱动情况 主板Lenovo IdeaPad S540-14IML 2019 (Type 81NF) 处理器Intel Core i5-10210U / i7-10510U已驱动 内存Internal 4GB 2666 Changeable 8GB 2666 memo…

Android进程间通信

在操作系统中,每个进程都有一块独立的内存空间。为了保证程序的的安全性,操作系统都会有一套严格的安全机制来禁止进程间的非法访问,但是,很多情况下进程间也是需要相互通信的 进程间通信(Inter-process communication…

嵌入式学习笔记——SPI通信的应用

SPI通信的应用 前言屏幕分类1.3OLED概述驱动芯片框图原理图通信时序显示的方式页地址、列地址初始化指令 程序设计初始化代码初始化写数据与写命令清屏函数 初始化代码字符显示函数 总结 前言 上一篇中介绍了STM32的SPI通信,并根据框图和寄存器进行了SPI通信的初始…

轻松掌握k8s(使用docker)安装知识点

1、介绍 kubernetes具有以下特性: 服务发现和负载均衡 Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。存储编排 Kubernetes 允许你自…

【数据库】— 无损连接、Chase算法、保持函数依赖

【数据库】— 无损连接、Chase算法 Chase算法Chase算法举例一种简便方法:分解为两个模式时无损连接和函数依赖的一个简单例子 Chase算法 形式化定义: 构造一个 k k k行 n n n列的表格,每行对应一个模式 R i ( 1 ≤ i ≤ k ) Ri (1≤i ≤ k)…

计算机组成原理汇总

提示:日落归山海,山海藏深情 文章目录 1.1 计算机的发展1.2 计算机硬件的基本组成1.3 计算机的性能指标2.1.1 进位计数制2.1.2 BCD码2.1.3 无符号整数的表示和运算2.1.4 带符号整数的表示和运算(原反补)2.1.5原反补码的特性对比2.1.6 移码2.1.7 定点小数…

【逗老师的无线电】骚活,GPS热点盒子自动上报APRS位置

逗老师最近整了个有意思的小活,组装了一个有4G网卡带GPS功能的热点盒子,让盒子基于GPS位置信息,自动上报APRS位置帧 全篇亮点 基于GPS和AGPS共同定位基于TCP直接上报APRS数据帧 别说,这小活整完之后,还是有点意思的&…

linux coredump

文章目录 是什么生成原理coredump 的“危害” reference: 一文读懂Coredump文件是如何生成的 GDB是什么? 是什么 简单的讲:当进程接收到某些信号而导致异常退出时,就会生成 coredump 文件 在程序发生某些错误而导致进程异常退出时&#x…

技术分析内核并发消杀器(KCSAN)一文解决!

一、KCSAN介绍 KCSAN(Kernel Concurrency Sanitizer)是一种动态竞态检测器,它依赖于编译时插装,并使用基于观察点的采样方法来检测竞态,其主要目的是检测数据竞争。 KCSAN是一种检测LKMM(Linux内核内存一致性模型)定义的数据竞争(data race…

亿发软件:中大型仓库进出货管理系统解决方案,定制软件让仓储作业高效便捷

中大型仓库出入库管理是传统厂家供应链管理流程的重要部分,直接关乎货物在仓库当中存储的安全,和员工工作的效率。一旦仓库管理当中出现了疏漏,那么货物的信息数据就会发生变动,导致实际与账目不符。人工带来的低效与不可控是传统…

软件测试行业到底有没有前景和出路?

我现在来跟你说说软件测试的真正情况。 首先一个软件做出来,最不能少的人是谁?不用说就是开发,因为开发是最了解软件运作的那个人,早期不少一人撸网站或者APP的例子,相当于一个人同时是产品、研发、测试、运维等等&am…

15-721 Chapter9 数据压缩

Background disk database的瓶颈在disk IO上的话(也就是说数据压缩的好处很大,可以比较放心的做),那么内存数据库的瓶颈是多方面的,其中包含cpu。所以我们要在计算量和压缩率(DRAM还是有点贵的&#xff0c…

需求管理实践四大流程的注意事项

需求管理实践包括四大流程:需求采集、需求分析、需求筛选和需求处理。 1、需求采集注意事项 需求采集需要通过多种形式对不同用户需求进行收集,并对需求的属性进行详细记录,并记录可追溯的反馈人员,以便后期跟踪修改。 需求管理实…

你不知道的Redis Search 以及安装指南

theme: orange 本文正在参加「金石计划」 这篇文章是为了使用Redis Search 的向量搜索功能提前做的环境准备工作。即讨论如何在准备生产的 linux 环境中安装 RediSearch 和 RedisJSON 模块。 什么是RediSearch? 根据RediSearch的官方文档 RediSearch是这样描述的。 …

线性表,栈和队列(2)

作者:额~我那个早过50了,忘记了 言归正传ca 什么是栈? 小李攒钱买了车,可是他家住在胡同的尽头。胡同很窄,只能通过一辆车,而且是死胡同。小李每天都为停车发愁,如果回家早了停在里面&#x…