安装wordpress素锦/长春关键词优化报价
目录
1. 引用
1.1 引用特性
1.2 常引用
1.2.1 权限放大
1.2.2 权限缩小
1.3 使用场景
1.3.1 传参
1.3.2 做返回值
1.4 传值和传引用的效率比较
1.5 引用和指针的区别
2. 内联函数
2.1 inline
2.2 特性
1. 引用
在C++中,引入了一个新的概念引用,与传统的定义变量不同,传统的定义变量是新开一份空间来存储数据,而引用则是给一个已经存在的空间起一个别名,它和引用的变量共用同一份空间。
1.1 引用特性
- 引用必须在定义的时候初始化
- 一个变量可以有多个引用
- 引用一旦引用一个实体就不能在引用其他实体
int a = 0;int& b = a;int& c = a;cout << a << ' ' << b << ' ' << c << endl;cout << &a << ' ' << &b << ' ' << &c << endl;
输出:
0 0 0
000000B0DDAFF6A4 000000B0DDAFF6A4 000000B0DDAFF6A4
从上述的输出可以很明显的看出引用是和被引用的实体共用用一块空间。
1.2 常引用
常引用就是const关键字修饰的引用,但是我们在使用常引用是会遇到各种报错,其实就是权限放大缩小的问题,所谓权限就是是否具有读或者写的权力,在C++中引用支持权限缩小但不支持权限放大。
1.2.1 权限放大
首先要说明的是c++是不支持权限放大的,如果出现权限放大就会出现报错。(权限放大就是增加了权限,比如原本变量用const修饰只能读不能修改,你用引用引用它时没有使用const修饰即为可以修改,这就叫做权限放大,这是不被编译器允许的。)
const int a = 0;//错误写法int& ra = a; //变量a有const修饰符,说明a只读不可写入,这里没有用const修饰,造成权限放大。//正确写法const int& rra = a;
还有一种情况特别容易发生错误,而且犯错的人常常觉得自己没有发生权限放大,但是确确实实发生了,并且发生了报错,这就是会发生类型转换的场景。比如下面的场景。
1.2.2 权限缩小
在C++中权限缩小是被允许的,权限缩小就是比如原来的变量可读可写,你用一个const引用引用这个实体是完全可以的,比如:
int a = 0;const int& b = a;
1.3 使用场景
1.3.1 传参
传参的一个特别典型的应用就是swap了,因为引用所引用的实体和本体共用的是一个空间,所以引用发生改变其实也就是本体发生改变。所以swap交换变量值就是一个很典型的应用。
void mySwap(int& a, int& b)
{swap(a, b);
}
int main()
{int a = 0, b = 1;cout << a << b << endl;swap(a, b);cout << a << b << endl;
}
输出:
01
10
1.3.2 做返回值
int& count()
{static int a = 0;a++;//...return a;
}
但是我们在返回引用的时候要特别注意被引用对象的作用域和声明周期,以免导致非凡的访问,比如下面的案例:
//错误案例
int& add(int a, int b)
{int c = a + b;return c;
}
int main()
{cout << add(1, 2) << endl;
}
所以这里纵使编译器返回了正确的结果甚至也没有报错,但它依然是一种错误的使用。
1.4 传值和传引用的效率比较
以值作为参数或者返回类型,在传参和返回的期间,变量不会直接传递实参或返回变量本身,而传递的是实参或者变量的一份临时拷贝,如果需要拷贝的类型特别大的时候,效率是极低的。而传引用是直接传递实参或返回变量的本身,几乎没有什么消耗。
1.5 引用和指针的区别
在语法概念上引用其实是一个别名没有独立的空间,和其引用的实体共用同一块空间。但是在底层的实现上实际上是有空间的,因为引用是按照指针方式来实现的。我们通过引用和指针的汇编代码就可以很容易的看出来。
引用和指针的不同点:
- 引用在概念上定义一个变量的别名,指针存储一个变量地址。
- 引用在定义的时候必须初始化,指针没有要求。
- 引用只能引用一个实体,不能更改,指针可以在任何时候指向一个任意的同类型的实体。
- 没有NULL引用,有NULL指针。
- sizeof(引用)是引用类型的大小,但指针始终是地址空间所占字节个数。
- 引用自增为所引用的实体自增,指针自增表示向后偏移一个类型的大小。
- 指针需要显式解引用,引用编译器自己处理。
- 引用比指针安全。
2. 内联函数
2.1 inline
以inline关键字修饰的函数叫做内联函数,编译时C++会在调用内联函数的地方展开,没有函数建立栈帧的开销,提升程序运行的效率。C++期望用inline去替代c语言的宏(因为宏不方便调试,会使代码可读性降低,可维护性差,没有类型的安全检查)
2.2 特性
inline是一种空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用将函数体替换函数调用,但会让目标文件变大。
inline对于编译器只是一个建议,不同的编译器关于inline的实现机制有可能不同,一般将函数规模较小的函数不是递归且频繁调用的函数采用inline修饰,否则编译器可能会忽略inline特性。
inline也不支持声明和定义分离分离会导致链接错误,因为inline函数会被展开,没有函数地址,如果声明和定义分开会导致链接阶段找不到函数的地址从而报错。
相关文章:

【C++精华铺】3.C++入门 引用(const)、内联函数
目录 1. 引用 1.1 引用特性 1.2 常引用 1.2.1 权限放大 1.2.2 权限缩小 1.3 使用场景 1.3.1 传参 1.3.2 做返回值 1.4 传值和传引用的效率比较 1.5 引用和指针的区别 2. 内联函数 2.1 inline 2.2 特性 1. 引用 在C中,引入了一个新的概念引用,与…...
生态系统服务(InVEST模型)供给与需求、价值核算技术及人类活动、重大工程项目、自然保护区、碳中和等领域中实际案例分析
对接工作实际项目及论文写作,解决参会者关注的重点及实际项目过程问题,采取逐步延伸的逻辑,不论您是小白亦或是已经能够成功运行InVEST模型生成结果,您可以自由选择课程内容,如果您是小白老师手把手教您,如…...

TiDB Serverless 正式商用,全托管的云服务带来数据管理和应用程序开发的全新体验
八 年 前 ,我们构建了 TiDB,一个开源分布式关系型数据库。 我们的目标是重新定义开发者和企业处理数据的方式,满足不断增长的可扩展性、灵活性和性能需求。 从那时起,PingCAP 便致力于为开发者和企业提供快速、灵活和规模化的数据…...

PXE-kickstart无人值守安装操作系统
PXE的概念: PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于C/S的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统…...

使用Flask.Request的方法和属性,获取get和post请求参数(二)
1、Flask中的request 在Python发送Post、Get等请求时,我们使用到requests库。Flask中有一个request库,有其特有的一些方法和属性,注意跟requests不是同一个。 2、Post请求:request.get_data() 用于服务端获取客户端请求数据。注…...

解决 idea maven依赖引入失效,无法正常导入依赖问题
解决 idea maven依赖引入失效,无法正常导入依赖问题_idea无法导入本地maven依赖_普通网友的博客-CSDN博客 解决 idea maven依赖引入失效,无法正常导入依赖问题 idea是真的好用,不过里面的maven依赖问题有时候还真挺让人头疼,不少小…...

Python之集合(set)基础知识点
文章目录 1. 创建集合2. 获取集合的元素个数3. 向集合中添加元素4. 从集合中移除元素5. 判断元素是否在集合中6. 遍历集合7. 常用的集合操作7.1 并集7.2 交集7.3 差集 在Python中,集合(Set)是一种无序且不重复的数据结构。它是由一组用花括号…...

flutter 没有open android module in Android studio 插件代码爆红
参考 1.结论 其实就是缺少这个文件 2.解决方案有两个 2.1 方案一 手动创建一个,命名规则是项目名字‘_android’‘.iml’ 内容如下: <?xml version"1.0" encoding"UTF-8"?> <module type"JAVA_MODULE" version"4">&l…...

计算机网络实验2:网络嗅探
文章目录 1. 主要教学内容2. Wireshark介绍3. Wireshark下载4. 使用Wireshark捕获包4.1 选择网卡4.2 停止抓包4.3 保存数据 5. Wireshark的过滤规则6. Wireshark实例 1. 主要教学内容 实验内容:安装、学习使用网络包分析工具Wireshark。所需学时:1。重难…...
智慧防灾:数字孪生技术的应用
最近的“杜苏芮”“卡努”有没有对大家产生影响呢? 频繁发生的台风和其他自然灾害引起了人们对于灾害预防和应对的高度关注。在这种背景下,数字孪生作为一项前沿技术,为灾害预防领域提供了全新的解决方案。本文就带大家了解一下数字孪生技术…...

Google 扫码器(仅限 Android)
Google 扫码器(仅限 Android) Google Code Scanner API 提供了全面的扫描解决方案,无需您的应用请求相机权限,同时保护用户隐私。这是通过将扫描代码委托给 Google Play 服务并仅将扫描结果返回给您的应用来完成的(视…...

pandoc word转markdown之后正则修改
问题 用pandoc工具将doc文件转换为markdown文件后,有关图片的处理会变成: (./url路径){width“3.46875in” height“1.0729166666666667in”} 但是我要展示到前端的,前端组件用的v-md-preview,结果展示的时候,后面的宽…...

使用Python和wxPython将图片转换为草图
导语: 将照片转换为艺术风格的草图是一种有趣的方式,可以为您的图像添加独特的效果。在本文中,我们将介绍如何使用Python编程语言和wxPython图形用户界面库来实现这一目标。我们将探讨如何使用OpenCV库将图像转换为草图,并使用wxPython创建一…...

深入浅出对话系统——闲聊对话系统进阶
引言 本文主要关注生成式闲聊对话系统的进阶技术。 基于Transformer的对话生成模型 本节主要介绍GPT系列文章,这是由OpenAI团队推出的,现在大火的ChatGPT也是它们推出的。 GPT : Improving Language Understanding by Generative Pre-Traini ng 在自…...

List与Set的区别
List与Set的区别 大家好,在我们平时的代码编写过程中,经常会碰到需要使用到集合类型: List与Set。很多时候,我们可能会将它们视为同一种类型进行使用,但是在实际的编程逻辑中,它们之间是存在很大差别的。接下来我们就…...

MyBatis 实战指南:探索灵活持久化的艺术
文章目录 前言一、初识 MyBatis1.1 什么是 MyBatis1.2 为什么学习 MyBatis 二、MyBatis 在软件开发框架中的定位三、基于 Spring Boot 创建 MyBatis 项目3.1 添加 MyBatis 框架的支持3.2 配置数据库连接信息和映射文件的保存路径(Mapper XML) 四、MyBati…...

高中教师能去美国做访问学者吗?
美国作为世界上高等教育水平较高的国家之一,吸引了众多学者前往交流学习。那么高中教师是否能够成为美国访问学者,这是当然的,高中老师是可以出国访学的,但是出国做访问学者会涉及到多方面的因素。 首先,教师个人的学术…...

93 | Python 设计模式 —— 建造者模式
文章目录 什么是建造者模式?建造者模式的四个角色Python建造者模式示例建造者模式的优点建造者模式的适用场景案例1:股票价格监控案例2:天气预报系统总结当构建复杂对象时,经常会遇到对象的创建过程非常复杂、包含多个步骤、或者有不同的配置选项。这时,使用建造者模式是一…...

nacos升级开启鉴权后,微服务无法连接的解决方案
版本: 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本,开启鉴权 1.在application.properties配置文件开启鉴权&…...

elementui弹窗页按钮重复提交问题解决
一、BUG场景 ruoyi平台,页面弹出窗有提交按钮,在提交时连续多次点击会发生重复提交。 二、错误方案 给按钮增加 :loading"submitLoading" 属性。 <el-dialog :title"title" :v-if"open" :visible.sync"open&…...

HBase-读流程
创建连接同写流程。 (1)读取本地缓存中的Meta表信息;(第一次启动客户端为空) (2)向ZK发起读取Meta表所在位置的请求; (3)ZK正常返回Meta表所在位置&#x…...

Matlab绘图 图例legend 太长,怎么减小指示线的长度
来源 绘图时,稍微减小文字已经不能正常放下图例,想通过调整图例指示线段长度缩减整个图例长度。 方法一 参考matlab官方论坛 leg legend(Plot1,Plot2,...); leg.ItemTokenSize [x1,x2]; By default x130 and x218 so put larger or smaller number…...

力扣17(电话号码中的字符组合)
题目表述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例1 输入:digits "23" 输出࿱…...

vue+element 下载压缩包和导出
export function goodsInspectionReportDwnloadZip (params) {return axios({url: "/warehouse-entry-server/v1/goodsInspectionReport/downloadZip",method: "get",params,responseType: "blob"}) } //下载handleDownloadFile() {if (!this.$r…...

构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)
目录 Cadvisor InfluxDBGrafana 1. Cadvisor 2.InfluxDB 3.Grafana 开始部署: 下载组件镜像 创建自定义网络 创建influxdb容器 创建数据库和数据库用户 创建Cadvisor 容器 准备测试镜像 创建granafa容器 访问granfana 添加数据源 Add data source 新建 …...

hive编译报错整理
背景 最近在修hive-1.2.0的一个bug,需要修改后重新打包部署到集群,打包的时候报下面的错误,原因很简单,从远程仓库里面已经拉不到这个包了。 org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde was not found in http…...

centos磁盘爆满可以清理mysql-bin.000011吗
mysql-bin.000011 是 MySQL 的二进制日志文件,用于记录数据库中的更改操作。删除该文件可能会导致数据库恢复、备份和复制等功能的中断或数据丢失。因此,在删除任何 MySQL 的二进制日志文件之前,请确保您了解其潜在影响并采取适当的备份措施。…...

SSM个人博客项目
文章目录 SSM个人博客系统实现项目介绍 一、准备工作0. 创建项目添加对应依赖1. 数据库设计2. 定时实体类 二、功能实现1.统一功能处理统一返回格式统一异常处理定义登录拦截器 2. 注册登录实现生成获取验证码密码加盐实现注册功能登录功能注销功能 3.登录用户博客列表获取登录…...

vue插槽是什么?如何使用?
1、意义 插槽是vue提供的一个内置组件,是一个占位符。作用是可以向组件中传递一段html代码,加强了组件封装性以及复用性。 2、分类 插槽通常分为匿名插槽、具名插槽、作用域插槽 匿名插槽: 顾名思义就是没有名字的插槽,我们通…...

yum常用操作命令
目录 查询命令 查看当前所有仓库 检查可升级的程序 安装、卸载、升级 清除缓存命令 生成缓存 查询命令 列出已安装的软件包:yum list installed列出仓库中还未安装的软件包:yum list available列出指定软件包的依赖关系:yum deplist &…...