初始C++(四):内联函数
文章目录
- 一.内联函数概念
- 二.内联函数用法
- 三.内联函数的特性
- 四.内联函数和宏
一.内联函数概念
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。
二.内联函数用法
inline void swap(int& x, int& y)//内联函数
{int tmp = x;x = y;y = tmp;
}int main()
{int x = 10;int y = 20;swap(x, y);cout << x << ' ' << y << endl;return 0;
}
普通函数在调用的时候会开辟函数栈帧,而内联函数是直接替换,在调用内联函数的地方进行展开。
在release模式下可以通过调试->右键代码->反汇编中看到效果,而debug模式下需要手动设置,因为debug模式下,编译器默认不会对代码进行优化,以下给出vs2013的设置方式:
通过汇编可以发现调用swap不是通过call指令转到swap函数之后在执行,而是直接将swap函数展开:
三.内联函数的特性
- inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率。(这里的空间是指可执行程序体积会变大)
- inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性
- inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。所以这里建议不要去声明了,直接在.h文件或者要用的地方直接定义就行。
四.内联函数和宏
宏的优点:
1.增强代码的复用性
2.提高性能
宏的缺点:
1.不方便调试
2.变量没有类型安全的检测(只是纯粹的替换)
3.在有些地方用起来繁琐,容易出错
4.导致代码可读性差,可维护性差
因为宏有很多缺点,所以C++建议
1.一般的宏常量用const,enum枚举来替换
2.简单的宏函数用内联函数去替换
相关文章:
初始C++(四):内联函数
文章目录一.内联函数概念二.内联函数用法三.内联函数的特性四.内联函数和宏一.内联函数概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 二.内联函…...
九、初识卷积
文章目录1、通过边缘检测认识卷积2、Padding3、Strid Convelution4、RGB图像的卷积THE END1、通过边缘检测认识卷积 \qquad在使用神经网络进行图像识别时,神经网络的前几层需要完成对图像的边缘检测任务,所谓的边缘检测就是让计算机识别出一张图片的垂直…...
【Linux】【编译】编译调试过程中如何打印出实际的编译命令
🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:Linux技术&…...
linux安装jdk
step1 下载jdk 到下面的网站下载需要的jdk安装包版本。 Java Downloads | Oracle step2 复制到opt目录 其中user_name对应自己的home目录的用户文件夹 sudo cp /home/user_name//home/czh/Downloads/jdk-17_linux-x64_bin.tar.gz /opt/ step3 到opt目录解压安装包…...
迅为iTOP-3A5000龙芯开发板安装UOS操作系统
3A5000板卡采用全国产龙芯3A5000处理器,基于龙芯自主指令系统(LoongArch),市面上龙芯3A5000主板价格都在上万元,可以说是非常贵了, 迅为全新推出了款千元内的iTOP-3A5000开发板,这款板卡各方面的配置也是第…...
Firefox 110, Chrome 110, Chromium 110 官网离线下载 (macOS, Linux, Windows)
Mozilla Firefox, Google Chrome, Chromium, Apple Safari 请访问原文链接:https://sysin.org/blog/chrome-firefox-download/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org 天下只剩三种(主流&am…...
如何使用ArcGIS转换坐标
1.概述大家都知道ArcGIS提供了坐标转换功能,在我们手里的数据坐标系千差万别,经常会遇到转换坐标的时候,那么是否可以用ArcGIS进行转换?答案是肯定的,但是转换的过程比较复杂,这里为大家介绍一下转换的方法…...
链表基本原理
链表基本原理1.链表1.1 基本原理1.2 链表大O记法表示2. 链表操作2.1 读取2.2 查找2.3 插入2.4 删除3.链表代码实现1.链表 1.1 基本原理 节点 组成链表的数据格子不是连续的。可以分布在内存的各个位置。这种不相邻的格子就叫结点。每个结点保存数据还保存着链表里的下一结点的…...
基于JAVA+SpringBoot+Vue+ElementUI中学化学实验室耗材管理系统
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 当前,中学…...
1.输入子系统学习-struct input_dev-2023.02
内核版本:4.4.194 平台相关:rk3399 目前主要是看的触摸屏的代码 目录 一、include/linux/input.h(struct_input_dev) 二、结构体的注释部分(百度翻译) 三、Documentation/input/event-codes.txt&…...
解决:PDFBox报的java.io.IOException: Missing root object specification in trailer
文章目录问题描述原因分析解决方案问题描述 使用pdfbox类库操作pdf文件时,遇到下面的报错信息: java.io.IOException: Missing root object specification in trailer PDFBox参考: https://pdfbox.apache.org/ Apache PDFBox 库是一个开源的…...
MAC OSX安装Python环境 + Visual Studio Code
MAC上开发python怎么能少得了python3环境呢,而安装python3环境的方式也有多种,这里仅选用并记录本人认为比较方便的方式 安装Homebrew Homebrew是macOS 缺失的软件包管理器, 使用它可以在MAC上安装很多没有预装的东西,详细说明可…...
音乐 APP 用户争夺战,火山引擎 VeDI 助力用户体验升级!
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 国内数字音乐市场正在保持稳定增长。 根据华经产业研究院数据报告显示,2020 年数字音乐市场规模为 357.3 亿元,到 2022 年市场规模已增长至 482.7 …...
CAP和BASE理论
CAP理论CAP是 Consistency、Availability、Partition tolerance 三个词语的缩写,分别表示一致性、可用性、分区容忍性。它指出一个分布式计算系统不可能同时满足以下三点:• 一致性(Consistency) :等同于所有节点访问同…...
基于商品理解的成交能力和成交满意度优化在Lazada的实践
作者:马蕊 Lazada推荐算法团队 在Lazada各域推荐场景中,既有优质商品优质卖家不断涌现带来的机会,也有商品质量参差带来的问题。如何才能为用户提供更好的体验,对卖家变化行为进行正向激励呢?下面本文将为大家分享我们…...
idea推送镜像到desktop报错:Cannot run program “docker-credential-desktop“ 系统找不到指定的文件。
windows Docker 搭建仓库 打开docker desktop 。 打开windows cmd窗口或powershell窗口。 输入"docker run -d -p 5000:5000 --name test registry:2 "运行一个名字叫test的registry容器。 idea配置springboot项目的docker插件 在pom.xml中的plugins中加入下面代码…...
hive开窗函数
hive开窗函数 窗口函数 数据准备 1 jx 20 2 zx 24 3 yx 18 4 wz 10 5 yy 34 6 wy 25create table t (> id int,> name string,> age int> )> row format delimited fields terminated by ; load data inpath /data/data.txt into table t;ROW_NUMBER ROW_N…...
安全多方计算系列笔记1——前世今生
这一系列笔记参考了绿盟科技研究通讯的安全多方计算文章,及其他。 首先看定义:在不泄露参与方原始输入数据的前提下,允许分布式参与方合作计算任意函数,输出准确的计算结果。 起源 安全多方计算问题及解首先由姚期智(…...
16- 梯度提升分类树GBDT (梯度下降优化) (算法)
梯度提升算法 from sklearn.ensemble import GradientBoostingClassifier clf GradientBoostingClassifier(subsample0.8,learning_rate 0.005) clf.fit(X_train,y_train) 1、交叉熵 1.1、信息熵 构建好一颗树,数据变的有顺序了(构建前,…...
SpringCloud+Nacos+Gateway
SpringCloudNacosGatewaySpringBoot整合GatewayNacos一. 环境准备1. 版本环境2. 服务环境二. 实战1.创建用户服务2.创建订单服务3.创建网关服务4.测试三. 避坑指南问题1--503问题问题2--网关服务启动报错SpringBoot整合GatewayNacos 本篇文章只演示通过gateway网关服务访问其他…...
高通开发系列 - linux kernel内核升级msm-3.18升至msm-4.9(2)
By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 返回高通开发系列 - 总目录 前面我们升级了msm-4.9内核系统正常启动了,文件系统也正常工作,但那是使用了老基线的文件系统,其yocto…...
Spring依赖注入与反转控制到底是个啥?
目录 1. 引言 2. 管中窥豹 3.1 Spring 依赖注入 3.2 Bean 的依赖注入方式有两种 4. 总结 1. 引言 此文目的是用通俗易懂的语言讲清楚什么是依赖注入与反转控制,在看了大量的博客文章后归纳总结,便于后续巩固!我相信,大多数…...
Linux Shell脚本讲解
目录 Shell脚本基础 Shell脚本组成 Shell脚本工作方式 编写简单的Shell脚本 Shell脚本参数 Shell脚本接收参数 Shell脚本判断用户参数 文件测试与逻辑测试语句 整数测试比较语句 字符串比较语句 Shell流程控制 if条件判断语句 单分支 双分支 多分支 for循环语句…...
Linux:用户空间非法指针coredump简析
1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 背景 本文分析基于 ARM32 架构,Linux-4.14 内核代码。 3. 问题分析 3.1 测试范例 void main(void) {*(int *)0 8; }运行程序会 …...
带你玩转Jetson之Deepstream简明教程(四)DeepstreamApp如何使用以及用于工程验证。
1.DeepstreamApp是什么? 如果你安装完毕deepstream整体框架,会在你的系统执行目录内有可执行文件,文件名字是deepstream-app。这是一个可执行脚本文件,通过deepstream框架中的代码在安装的时候编译后install到系统根目录内。 此脚…...
快速搭建个人在线书库,随时随地畅享阅读!
前边我们利用NAS部署了个人的导航页、小说站、云笔记,今天,我们再看看怎么部署一个个人的在线书库。 相信很多朋友都在自己的电脑中收藏了大量的PDF、MOBI等格式的电子书籍,但是一旦换了一台设备,要么是无法翻阅,要么…...
电子纸墨水屏的现实应用场景
电子纸挺好个东西,大家都把注意力集中在商超场景 其实还有更多有趣的场景方案可用,价值也不小,比如: 一、仓库场景 通过亮灯拣选,提高仓库作业效率 二、仓库循环使用标签 做NFC类发卡式应用,替代传统纸…...
常量const、引用、指针的大杂烩
文章目录1 普通引用1.1 对普通值的普通引用1.2 对常量值的普通引用1.3 对普通指针的普通引用1.4 对常量指针的普通引用1.5 对指针常量的普通引用1.6 对指向常量的指针常量的普通引用2 常量引用2.1 对普通值的常量引用2.2 对常量值的常量引用2.3 对普通指针的常量引用2.4 对常量…...
宝塔搭建实战php开源likeadmin通用管理移动端uniapp源码(四)
大家好啊,我是测评君,欢迎来到web测评。 上一期给大家分享了pc端的部署方式,今天来给大家分享uniapp端在本地搭建,与打包发布到宝塔的方法。感兴趣的朋友可以自行下载学习。 技术架构 vscode node16 vue3 uniapp vite types…...
Hive的分区表与分桶表内部表外部表
文章目录1 Hive分区表1.1 Hive分区表的概念?1.1.1 分区表注意事项1.2 分区表物理存储结构1.3 分区表使用场景1.4 静态分区表是什么?1.4.1 静态分区表案例1.4.2 分区表练习一1.4.3 分区操作1.5 动态分区表是什么?1.5.1 动态态分区表案例&#…...
茂名网站制作维护/优化 保证排名
目的:为了在pycharm上使用caffe。 第一步:安装vs2013 地址:链接: https://pan.baidu.com/s/1WdnIllasduNrDCcdwcR5Hg 提取码: unyk 第二步:下载caffe-masters源码,https://github.com/microsoft/caffe 解压后&…...
美妆网站建设规划/免费的行情网站app
深究ReentrantLock源码及其使用方法 1.先附上ReentrantLock类的源码,然后再进行一行一行分析 /*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimpor…...
更改wordpress网站的url/网页制作代码大全
2. 面向对象三大特性之封装 面向对象三大特征:封装,继承,多态封装就是将一些细节信息隐藏起来,对外界不可见 方法就是一种封装private关键字也是一种封装 2.1 private和this关键字 private关键字(私有化)…...
杭州住房建设部官方网站/百度收录关键词
1. 消息的可靠性投递 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。 RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。 confirm 确认模式:当消息从 producer 发送到 exchange 则会执行 confirmCallback中的confirm方…...
湖州营销网站建设/网站建设及网络推广
path 题目描述 这次的任务很简单,给出了一张有N个点M条边的加权有向无环图,接下来有Q个询问,每个询问包括2个节点X和Y,要求算出从X到Y的一条路径,使得密度最小(密度的定义为,路径上边的权值和除…...
网站建设 中企动力 武汉/营销推广网
无论是Windows系统还是Linux系统都是基于权限控制的,其严格的用户等级和权限是系统安全的有力保证。这么严密的用户权限是否不可逾越呢?下面笔者反其道而行之进行Windows及Linux下的提权测试。 一、windows下获取至高权限 大家知道,在Windows系统中SYST…...