[C++]内联函数(内联函数的概念,内联函数的特性,内联函数与宏的区别)

news2024/11/19 17:43:40

一、内联函数的概念

以inline修饰的的函数叫内联函数,编译时C++编译器会在调用内联函数的位置将内联函数展开,内联函数没有调用函数参数压栈的开销,内联函数可以提高程序的运行效率。

例子:

没有使用内联函数

使用内联函数(注意:在debug模式下要对编译器进行一些设置才能真正的使用内联函数)

二、内联函数的特性

  1. inline是一种以空间环时间的做法,省去了调用函数的额外开销,所以如果函数很长或者函数内部有循环/递归就不适合定义为内联函数。
  2. inline对于编译器来说只是一种建议,如果编译器认为该函数不适合定义为内联函数,如函数内有循环/递归等情况,则编译器会忽略内联这个关键字。
  3. inline不建议声明与定义分离,分离会导致链接错误,因为内联函数会被展开,此时就没有了函数地址了,链接就会找不到。

三、内联函数与宏函数的区别

首先给一个宏函数的列子供大家回忆回忆宏函数的写法

// 定义一个宏函数,用于计算两个数的最大值
#define MAX(a, b) ((a) > (b) ? (a) : (b))  

宏函数

优点:
  • 在预处理时展开,少了调用函数和参数压栈的开销
缺点:
  1. 在预处理阶段展开,增加了预处理的时间
  2. 在编译之前展开,如果编译时报错,错误不好定位
  3. 参数没有类型,子啊编译之间就已经展开,不能进行参数类型检查,安全性低
  4. 可读性差,代码不好写,容易导致结果出问题
  5. 不能调试
  6. 因为会展开代码,如果调用过多,可能会导致代码膨胀

内联函数

优点:
  1. 内联函数时一个函数,参数有类型,可以进行参数的类型检查,安全性高
  2. 在编译阶段展开,少了调用函数的开销,提高了程序的运行效率
  3. 是一个函数,调式时可以不让编译器展开,方便调式代码
  4. 可读性高,写起来和普通函数没有区别,代码不易发生错误
缺点:
  1. 如果调用过多,可能会导致代码膨胀
  2. inline是一个建议性关键字,它只是给编译器一个建议,但编译器不一定采纳,如果编译器认为不适合设置为内联函数,则编译器会忽略inline,这会给用户造成困扰

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

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

相关文章

STM32技术打造:智能考勤打卡系统 | 刷卡式上下班签到自动化解决方案

文章目录 一、简易刷卡式打卡考勤系统(一)功能简介原理图设计程序设计 哔哩哔哩: https://www.bilibili.com/video/BV1NZ421Y79W/?spm_id_from333.999.0.0&vd_sourcee5082ef80535e952b2a4301746491be0 一、简易刷卡式打卡考勤系统 &…

UE4_旋转节点总结一

一、Roll、Pitch、Yaw Roll 围绕X轴旋转 飞机的翻滚角 Pitch 围绕Y轴旋转 飞机的俯仰角 Yaw 围绕Z轴旋转 飞机的航向角 二、Get Forward Vector理解 测试: 运行: 三、Get Actor Rotation理解 运行效果: 拆分旋转体测试一&a…

警惕垃圾邮件,伪造法院传真传播Sodinokibi勒索病毒

Sodinokibi勒索病毒在国内首次被发现于2019年4月份,2019年5月24日首次在意大利被发现,在意大利被发现使用RDP攻击的方式进行传播感染,这款病毒被称为GandCrab勒索病毒的接班人,在GandCrab勒索病毒运营团队停止更新之后&#xff0c…

Can‘t resolve ‘mockjs‘ in ‘......

问题场景: 未从根本目录打开项目在运行npm run serve 后报错:Parsing error: No Babel config file detected for...... 解决方法:在终端 cd ./含有package.json的文件夹/ npm run serve 此时在加载到70%之后报错 Cant resolve mockjs in .…

政安晨:【Keras机器学习实践要点】(四)—— 顺序模型

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 介绍 Keras是一个用于构建和训练深度学习模…

Docker搭建LNMP环境实战(05):CentOS环境安装Docker-CE

前面几篇文章讲了那么多似乎和Docker无关的实战操作,本篇总算开始说到Docker了。 1、关于Docker 1.1、什么是Docker Docker概念就是大概了解一下就可以,还是引用一下百度百科吧: Docker 是一个开源的应用容器引擎,让开发者可以…

初探Notion安装与使用

笔记工具哪家强,有道云笔记,印象笔记,记事本,notion 第一步、下载与安装 本次选择是window版本,下载地址【Notion官网】 版本为Notion Setup 3.3.0,软件大小74.3M,官网如下图所示。 进入登录…

STM32之HAL开发——DMA转运串口数据

DMA功能框图(F1系列) 如果外设要想通过 DMA 来传输数据,必须先给 DMA 控制器发送 DMA 请求, DMA 收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答信号之后,就会…

[深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现四

【简单介绍】 经过精心设计和深度整合,我们成功推出了这款融合了先进目标检测算法YOLOv8与高效PyQt5界面开发框架的目标检测GUI界面软件。该软件在直观性、易用性和功能性方面均表现出色,为用户提供了高效稳定的操作体验。 在界面设计方面,…

1.5T数据惨遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件93起,近三周攻击数量呈现持平状态。 本周Lockbit3.0是影响最严重的勒索家族,Blacksuit和Ransomhub恶意家族紧随其后,从整体上看Lockbit3.0依旧是影响最严重的勒索家族,需要注意防范。 …

MT6762_联发科MTK6762安卓核心板规格参数

MTK6762核心板是一款集成了蓝牙、fm、wlan和gps模块的高度集成基带平台,为LTE/LTE-A和C2K智能手机应用程序提供支持。该安卓核心板集成了ARM Cortex-A53处理器,工作频率可达2.0GHz,并且还集成了功能强大的多标准视频编解码器。除此之外&#…

如何区分模型文件是稳定扩散模型和LORA模型

区分模型文件是否为稳定扩散模型(Stable Diffusion Models)或LORA模型(LowRank Adaptation)通常需要对模型的结构和内容有一定的了解。以下是一些方法来区分这两种模型文件: 1. 文件格式和结构 稳定扩散模型&#xff1…

软考 系统架构设计师系列知识点之云原生架构设计理论与实践(7)

接前一篇文章:软考 系统架构设计师系列知识点之云原生架构设计理论与实践(6) 所属章节: 第14章. 云原生架构设计理论与实践 第2节 云原生架构内涵 14.2 云原生架构内涵 关于云原生的定义有众多版本,对于云原生架构的…

使用npm仓库的优先级以及.npmrc配置文件的使用

使用npm仓库的优先级以及.npmrc配置文件的使用 概念如何设置 registry(包管理仓库)1. 设置项目配置文件2. 设置用户配置文件3. 设置全局配置文件4. .npmrc文件可以配置的常见选项 概念 npm(Node Package Manager)是一个Node.js的…

PanTools v1.0.17 多网盘批量管理 批量分享、转存、复制...

软件介绍 一款针对多个热门网盘的文件管理、批量分享、批量转存、批量复制、批量重命名、批量链接检测、跨账号移动文件、多账号文件搜索等,支持不同网盘的不同账号的资源文件操作。适用于网站站长、资源爱好者等,对于管理名下具有多个网盘多个账号具有…

CSS 实现毛玻璃效果 | backdrop-filter与filter的区别

CSS 毛玻璃效果是一种使用 CSS 创建的视觉效果&#xff0c;可以使元素或区域呈现出模糊或半透明的外观&#xff0c;就像毛玻璃一样。 示例&#xff1a; <div class"container"><div class"textHolder"><p>glass</p></div>…

gitee多用户配置

一、引言 在工作的时候我们有时候会自己创建项目Demo来实现一些功能&#xff0c;但是又不想把自己的Demo代码放到公司的仓库代码平台&#xff08;gitee&#xff09;中管理&#xff0c;于是就是想自己放到自己的Gitee中管理&#xff0c;于是就需要配置Git多用户。 本文将配置分别…

论文篇05-论文范文-论数据访问层设计技术及其应用(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

试题:论数据访问层设计技术及其应用 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模型是将信息系统分…

谷粒商城——缓存——SpringCache

1. 配置使用 首先需要导入相关的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency> 随后在配置文件中进行配置&#xff1a; spring:cache:t…

Web CSS笔记2

目录 1、背景 ①、背景图片(image) ②、背景平铺&#xff08;repeat&#xff09; ③、背景位置(position) ④、背景附着&#xff08;attachment&#xff09; ⑤、背景透明(CSS3) ⑥、背景图片缩放大小&#xff08;size&#xff09;&#xff1a; ⑦、背景简写 2、标签显…