【C++】内联函数inline
文章目录
- 概念
- 使用
- 特性
- 原理
概念
C++中内联函数的出现解决了C语言宏函数的不足,类似于宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数,又称内嵌函数或内置函数。
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数可以提升程序运行的效率。
使用
在函数的返回值前加上inline关键字即可。
#include<iostream>
using namespace std;
inline int Add(int x, int y)
{return x + y;
}
int main()
{int ret = Add(10,20);cout<<ret<<endl;return 0;
}
如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。
特性
1)短小的,频繁调用的函数才适合声明为内联函数。要知道inline对于编译器而言只是一个建议,不是强制性的,编译器有自己的判断能力。
2)为什么函数体长了之后,内联函数不展开?
如果函数体代码比较长,如递归等,使用内联函数会导致代码膨胀。会导致编译后的程序存在多份相同的拷贝,编译出来的可执行程序也会非常大,会消耗更多的内存空间,如果指向函数体代码的时间比函数调用的开销大的多,那么inline效率收益会很小。
3)所以inline是一种空间换时间的做法(空间:由于函数体代码展开,编译出来的可执行程序大小/静态库,动态库/会变大)
4)综上,内联函数的缺点:可能会使目标文件变大;优点:少了调用开销,提高程序运行效率。
5)inline内联函数不建议声明和定义分离。
错误定义:声明和定义分离如下:
解决方法:直接在头文件中定义内联函数
原理
我们通过查看程序代码的反汇编语言,来了解一下inline函数的执行原理:
查看方式:
- 在release模式下,查看编译器生成的汇编代码中是否存在call Add
- 在debug模式下,需要对编译器进行设置,否则不会展开(因为debug模式下,编译器默认不会对代码进行优化,以下给出vs2013的设置方式)
先右击项目,点击项目属性。
我们先来看一段普通函数f的调用过程(通过查看debug下的汇编代码):
内联函数的原理即底层调用方式:
相关文章:
![](https://img-blog.csdnimg.cn/ebbb3066af844d009b06cf1c4be1a18f.png)
【C++】内联函数inline
文章目录概念使用特性原理概念 C中内联函数的出现解决了C语言宏函数的不足,类似于宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数,又称内嵌函数或内置函数。 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内…...
![](https://img-blog.csdnimg.cn/08877d793ddc43beade15a348d80dd7c.png#pic_center)
C++演讲比赛流程管理系统_黑马
任务 学校演讲比赛,12人,两轮,第一轮淘汰赛,第二轮决赛 选手编号 [ 10001 - 10012 ] 分组比赛 每组6人 10个评委 去除最高分 最低分,求平均分 为该轮成绩 每组淘汰后三名,前三名晋级决赛 决赛 前三名胜出 …...
![](https://img-blog.csdnimg.cn/70b2ccb3a69040198f6ce5c1ea63ae57.png)
谈谈低代码的安全问题,一文全给你解决喽
低代码是一种软件开发方法,通过使用图形化用户界面和可视化建模工具,以及自动生成代码的技术,使得开发人员可以更快速地构建和发布应用程序。 作为近些年软件开发市场热门之一,市面上也涌现了许多低代码产品,诸如简道云…...
![](https://img-blog.csdnimg.cn/91adf00b0825429ea3cbc7b01e5bd64d.png)
[数据结构]二叉树OJ(leetcode)
目录 二叉树OJ(leetcode)训练习题:: 1.单值二叉树 2.检查两棵树是否相同 3.二叉树的前序遍历 4.另一棵树的子树 5.二叉树的构建及遍历 6.二叉树的销毁 7.判断二叉树是否是完全二叉树 二叉树OJ(leetcode)训练习题:: 1.单值二叉…...
![](https://img-blog.csdnimg.cn/2a5f11a87eee478a94bcb00c022b51dd.png)
flutter 输入时插入分隔符
每四位插入一个分隔符import package:flutter/services.dart;class DividerInputFormatter extends TextInputFormatter {final int rear; //第一个分割位数,后面分割位,,数final String pattern; //分割符DividerInputFormatter({this.rear 4, this.pattern });overrideTex…...
![](https://img-blog.csdnimg.cn/578b90bf2bd9471eaf73d443ccd95a6f.jpeg)
静态版通讯录——“C”
各位CSDN的uu你们好呀,之前小雅兰学过了一些结构体、枚举、联合的知识,现在,小雅兰把这些知识实践一下,那么,就让我们进入通讯录的世界吧 实现一个通讯录: 可以存放100个人的信息每个人的信息:名…...
![](https://www.ngui.cc/images/no-images.jpg)
前端基础开发环境搭建工具等
一、基本开发环境(软件)安装1、Vscode(代码编辑器)官网下载网址:https://code.visualstudio.com/2、nvm(node多版本管理器,每个node版本都有对应的npm版本)安装包下载地址࿱…...
![](https://img-blog.csdnimg.cn/931571665af143c8a82e55b0127ddc74.png#pic_center)
华为OD机试题【IPv4 地址转换成整数】用 Java 解 | 含解题说明
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:IPv4 地址转换成整数 题目 存在…...
![](https://img-blog.csdnimg.cn/54f437c4d1cf4003aad5239438f7a233.png)
[数据结构]排序算法
目录 常用排序算法的实现:: 1.排序的概念及其运用 2.插入排序 3.希尔排序 4.选择排序 5.冒泡排序 6.堆排序 7.快速排序 8.归并排序 9.排序算法复杂度及稳定性分析 10.排序选择题练习 常用排序算法的实现:: 1.排序的概念及其运用…...
![](https://img-blog.csdnimg.cn/img_convert/9bd50ef5458a52b59147788c6f81a900.png)
不愧是2023年就业最难的一年,还好有车企顶着~
就业龙卷风已经来临,以前都说找不到好的工作就去送外卖,但如今外卖骑手行业都已经接近饱和状态了,而且骑手们的学历也不低,本科学历都快达到了30%了,今年可以说是最难找到工作的一年。 像Android 开发行业原本就属于在…...
![](https://img-blog.csdnimg.cn/img_convert/0688e090afb6e96a572ac53157e746e7.gif)
C/C++之while(do-while)详细讲解
目录 while循环有两个重要组成部分: while 是一个预测试循环 无限循环 do-while 循环 while循环有两个重要组成部分: 进行 true 值或 false 值判断的表达式;只要表达式为 true 就重复执行的语句或块;图 1 显示了 while 循环的…...
![](https://img-blog.csdnimg.cn/70dec3dfec5f437fb9b4377063ca66c1.png)
SpringCloud学习笔记(一)认识微服务
一、微服务技术栈 二、单体架构和分布式架构的区别 1、单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包进行部署 优点:架构简单,部署成本低缺点:耦合度高 2、分布式架构: 根据业务功能对系统…...
![](https://img-blog.csdnimg.cn/5f2484d5c4ed4d43bd1f1b10d53fc544.png)
Unity中使用WebSocket (ws://)的方法
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 WebSocket与http 其…...
![](https://www.ngui.cc/images/no-images.jpg)
米哈游春招算法岗-2023.03.19-第一题-交换字符-简单题
交换字符Problem Description 米小游拿到了一个仅由小写字母组成的字符串,她准备进行恰好一次操作:交换两个相邻字母,在操作结束后使得字符串的字典序尽可能大。 请你输出最终生成的字符串。 input 一个仅由小写字母组成的字符串,…...
![](https://img-blog.csdnimg.cn/521e60d8459b40f2bd654b1a410926db.png)
能把爬虫讲的这么透彻的,没有20年功夫还真不行【0基础也能看懂】
前言 可以说很多人学编程,不玩点爬虫确实少了很多意思,不管是业余、接私活还是职业爬虫,爬虫世界确实挺精彩的。 今天来给大家浅谈一下爬虫,目的是让准备学爬虫或者刚开始起步的小伙伴们,对爬虫有一个更深更全的认知…...
![](https://img-blog.csdnimg.cn/82991877b6574482bae009f3d8bcbd33.png)
springcloud学习总结
springcloud 构建微服务项目步骤 导入依赖编写配置文件开启这个功能 Enablexxx配置类 于2023年2月24日下午17点38分开始学习于2023年3月17日晚上20点26分学完总结代码地址:https://gitee.com/liang-weihao/StudySpringcloud学习笔记地址:https://www.…...
![](https://img-blog.csdnimg.cn/6825892e188745ab99a3ca0bfa520010.png)
2022年亏损超10亿,告别野蛮成长的众安在线急需新“引擎”
2023年3月21日,众安在线披露了2022年财报,营收233.52亿元,同比增长6.44%;净亏损16.33亿元,去年同期净利润为11.6亿元,同比由盈转亏。 尽管众安在线再次身陷亏损的泥潭,但投资者却没有选择逃离。…...
![](https://img-blog.csdnimg.cn/7c6fc26b4e6c47d9aa82210cd25bafae.png)
ChatGPT文心一言逻辑大比拼(一)
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...
![](https://img-blog.csdnimg.cn/96da91119f644bf4827c8058270cbd3a.png)
【机器学习面试总结】————特征工程
【机器学习面试总结】————特征工程一、特征归一化为什么需要对数值类型的特征做归一化?二、类别型特征在对数据进行预处理时,应该怎样处理类别型特征?三、高维组合特征的处理什么是组合特征?如何处理高维组合特征?四、组合特征怎样有效地找到组合特征?五、文本表示模型…...
![](https://img-blog.csdnimg.cn/434a4a18eeb54f978ba2dbc7e621e7cb.png)
如何将字符串反转?
参考答案 使用 StringBuilder 或 StringBuffer 的 reverse 方法,本质都调用了它们的父类 AbstractStringBuilder 的 reverse 方法实现。(JDK1.8)不考虑字符串中的字符是否是 Unicode 编码,自己实现。递归1. public AbstractStrin…...
![](https://img-blog.csdnimg.cn/img_convert/0c2c828e77ec4f8386a104cfbefe83de.webp?x-oss-process=image/format,png)
Linux内核IO基础知识与概念
什么是 IO在计算机操作系统中,所谓的I/O就是 输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为磁盘…...
![](https://img-blog.csdnimg.cn/20210410120210363.png#pic_center)
paper文献和科研小工具
一、好用的网站 Aminer 二、好用的工具 1. SciSpace SciSpace官网 【ChatGPT 论文阅读神器】SciSpace 用户注册与实战测试 SciSpace是一款基于 ChatGPT 的论文阅读神器。 2. ReadPaper 强大且超实用的论文阅读工具——ReadPaper ReadPaper官网 ReadPaper下载链接 Rea…...
![](https://img-blog.csdnimg.cn/img_convert/961b4afb9a615ac284c72f9d12f25ccb.png)
dfs和bfs能解决的问题
一.理解暴力穷举之dfs和bfs暴力穷举暴力穷举是在解决问题中最常用的手段,而dfs和bfs算法则是这个手段的两个非常重要的工具。其实,最简单的穷举法是直接遍历,如数列求和,遍历一个数组即可求得所问答案,这与我在前两篇博…...
![](https://img-blog.csdnimg.cn/74d1f3cf3dc740dd842ead5ddb8c378d.jpeg)
静态通讯录,适合初学者的手把手一条龙讲解
数据结构的顺序表和链表是一个比较困难的点,初见会让我们觉得有点困难,正巧C语言中有一个类似于顺序表和链表的小程序——通讯录。我们今天就来讲一讲通讯录的实现,也有利于之后顺序表和链表的学习。 目录 0.通讯录的初始化 1.菜单的创建…...
![](https://img-blog.csdnimg.cn/e8e2991e6c114de38a0703418acfe4b7.png)
【你不知道的 CSS】你写的 CSS 太过冗余,以至于我对它下手了
:is() 你是否曾经写过下方这样冗余的CSS选择器: .active a, .active button, .active label {color: steelblue; }其实上面这段代码可以这样写: .active :is(a, button, label) {color: steelblue; }看~是不是简洁了很多! 是的,你可以使用…...
![](https://img-blog.csdnimg.cn/88ad391782414761986c7bf5a5735b36.png)
Lesson 8.1 决策树的核心思想与建模流程
文章目录一、借助逻辑回归构建决策树1. 决策树实例2. 决策树知识补充2.1 决策树简单构建2.2 决策树的分类过程2.3 决策树模型本质2.4 决策树的树生长过程2.5 树模型的基本结构二、决策树的分类与流派1. ID3(Iterative Dichotomiser 3) 、C4.5、C5.0 决策树2. CART 决策树3. CHA…...
![](https://img-blog.csdnimg.cn/bf4751957b4843f2b363d810790b81f2.png#pic_center)
【算法】FIFO先来先淘汰算法分析和编码实战
背景 在设计一个系统的时候,由于数据库的读取速度远小于内存的读取速度 为加快读取速度,将一部分数据放到内存中称为缓存,但内存容量是有限的,当要缓存的数据超出容量,就需要删除部分数据 这时候需要设计一种淘汰机制…...
![](https://img-blog.csdnimg.cn/151edbd5080f44769a50e6b648525926.gif#pic_center)
二分查找——我欲修仙(功法篇)
个人主页:【😊个人主页】 系列专栏:【❤️我欲修仙】 学习名言:临渊羡鱼,不如退而结网——《汉书董仲舒传》 系列文章目录 第一章 ❤️ 二分查找 文章目录系列文章目录前言🚗🚗🚗二分查找&…...
![](https://www.ngui.cc/images/no-images.jpg)
Python 多线程
文章目录一、简介1.1 多线程的特性1.2 GIL二、线程1.2 单线程1.3 多线程三、线程池3.1 pool.submit3.2 pool.map四、Lock(线程锁)4.1 无锁导致的线程资源异常4.2 有锁五、Event(事件)5.1 简介5.2 示例六、Queue(队列&a…...
![](https://img-blog.csdnimg.cn/img_convert/0f30af270d484b4571c3e2582ff694c9.png)
JVM笔记(九)选择合适的垃圾收集器
Epsilon收集器Epsilon收集器由RedHat公司在JEP 318中提出,在此提案里Epsilon被形容成一个无操作的收集器(A No-Op Garbage Collector),而事实上只要Java虚拟机能够工作,垃圾收集器便不可能是真正“无操作”的。原因是“…...
![](/images/no-images.jpg)
中国做网站的公司/关键词搜索优化公司
Android开发过程中,对TextView会用得非常多,字体颜色渐变或增加很多色彩. 这里说三种渐变方式: 一、LinearGradient 1)继承 TextView,重写 onLayout 方法后设置 Shader,也可再ondraw中处理 public class GradientTe…...
![](https://img-blog.csdnimg.cn/c35c120217fe41de99a91e659464554e.png)
wordpress修改成中文/网站制作公司咨询
大家好,我是脚丫先生 (o^^o) 说起,android,这是多么遥远的英文单词。 「第一行代码」 我想学过android开发的小伙伴都应该读过,可谓是入门神作。 看着郭霖大佬的大作,此刻,有那么带点陌生而又带一丝熟悉…...
![](https://images0.cnblogs.com/blog2015/484310/201507/040840281346355.gif)
做外贸那个网站好/东莞seo公司
生命周期(Lifecycle ) Maven有三套相互独立的生命周期(Lifecycle ): Clean Lifecycle:做一些清理工作;Default Lifecycle:构建的核心部分、编译、测试、打包、部署等;Site Lifecycle:生成项目报告、站点、发…...
![](https://static.leiphone.com/uploads/new/article/740_740/201701/5875bf9c1a972.png?imageMogr2/format/jpg/quality/90)
网页动画/太原百度快速优化排名
现在,我们可以开始建立我们的模型啦。实际上数值计算都是由TensorFlow来完成,它使用了一个快速并高效的C后台程序。TensorFlow希望避免频繁地在Python和C之间切换,因为那样会降低计算速度。一般的工作流程是,首先为了定义所有的运…...
![](https://img-blog.csdnimg.cn/20200318163605480.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MTcwNzAw,size_16,color_FFFFFF,t_70)
网站不稳定/seo搜索引擎优化是什么意思
01 最长上升子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对…...
![](https://img-blog.csdnimg.cn/img_convert/c8b4a41b33bb8c3bbad7daf7c1e84bb9.png)
全国最大型网站建设/品牌营销做得好的品牌有哪些
1、消失模铸造大口径球墨铸铁管件的一般工艺流程(1)制作泡塑白模,组合浇注系统,气化模表面刷、喷特制涂料并烘干;(2)将特制砂箱置于振动工作台上,填入底砂(干砂)振实,刮平,将烘干的泡沫模样放于底砂上&…...