C++引用()笔记

news2025/1/23 21:18:05

C++引用(&)笔记

1.寄存器一般只有4/8个字节,所以返回时候的中间变量(下图的临时变量)不一定是储存在寄存器当中

2.传引用返回可以减少拷贝,增加效率

但运行打印会出错的,因为当栈帧销毁的时候,清理栈帧就会得到随机值

正确表达:

3.临时变量具有常性

这样的代码是无法通过编译的,因为这里涉及到了一个权限的放大,因为对于引用来说,权限不能被放大,只能权限缩小/平移

这里的临时变量a具有常性,所以它的类型其实是const double,从const double转换到了int这里是一个权限的缩小,所以会报错,如果改成const int &c=a;就可以通过编译了。

为什么要有临时变量?

这里的ij进行比较的时候,由于类型不同,需要对类型进行提升,一般是由小变大,比如这里的int就要提升到double才能进行比较,而这里的提升是对原变量i进行提升吗?如果因为一个比较而修改原来的变量类型那不是乱套了吗?所以这里会生成一个临时变量,然后对临时变量的类型进行提升,提升之后再与j进行比较。

4.引用是否开了空间?

从语法的层面上来说它是没有开空间的,它就是变量的别名,那么从汇编的角度来看呢?

先看指针pa的汇编代码:首先是将a的地址存在寄存器eax当中,然后再将eax(存的a的地址)给pa,然后把pa的地址给寄存器eax[eax]就是对eax进行解引用,把1Eh(30)eax

然后再看引用的汇编代码,可以看到和指针是几乎一摸一样的操作,所以从底层来说引用是开了额外了空间的,引用是类似指针的方式实现的

引用和指针的不同点:

  1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
  2. 引用在定义时必须初始化,指针没有要求
  3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体
  4. 没有NULL引用,但有NULL指针
  5. sizeof中含义不同引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32

位平台下占4个字节)

  1. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
  2. 有多级指针,但没有多级引用
  3. 访问实体的方式不同,指针需要显式解引用,引用编译器会自己处理
  4. 引用比指针更加安全

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

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

相关文章

西宾蜻蜓FM语音下载(qingtingdown)

一、介绍 西宾蜻蜓FM语音下载(qingtingdown),能够帮助你下载蜻蜓FM音频节目。如果你是蜻蜓FM会员,它还能帮你下载会员节目。 二、下载地址 本站下载:西宾蜻蜓FM语音下载(qingtingdown) 百度…

PSP - AlphaFold2 适配不同来源搜索的 MSA 接口

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130594303 MSA (Multiple Sequence Alignment) 在 AlphaFold2 中的工作方式如下: 使用搜索工具 (hhblits/hhsearch/jackhmmer),从大型数据库中,搜索与目标…

从零开始学习JVM(二)--类加载子系统

1. 类加载子系统介绍 JVM内存结构如下图所示: 程序计数器(PC寄存器):程序计数器是⼀块⼩的内存空间,可以看作是当前线程所执⾏的字节码的⾏号指示器。字节码解释器⼯作时通过改变这个计数器的值来选取下⼀条需要执⾏…

PyTorch读取数据集全部进内存,使网络的训练速度提高10倍以上!!!

正常情况下,torch读取数据的时候是Batch Size小批量读取。首先找到所有数据集的路径保持到一个变量中,之后需要读取哪个数据的时候,就根据这个变量中的路径索引去读取。因为硬件的限制,从硬盘中读取数据到显存中所花的时间要远远大…

计算机体系结构实验一

计算机体系结构实验一 一.实验目的 ​理解RISC-V的指令执行的数据流和控制信号,熟悉指令流水线的工作过程。 二.实验过程 1.RISC-V的相关指令 实验的模拟器使用RISC-V指令集,为了便于后续分析,首先学习实验中使用的RISC-V指令。 基本RIS…

Cesium最新版使用天地图地形及注记服务

天地图三维地名服务和地形服务需要利用 cesium 开源三维地球API与天地图扩展插件共同使用,目前支持cesuim1.52、1.58、1.63.1。 天地图调用demo: http://lbs.tianditu.gov.cn/docs/#/sanwei/ 注意: demo里的地形服务地址不对,需要自己更换成…

MCU通用移植方案

MCU通用移植方案 目录 MCU通用移植方案前言1 硬件移植2 软件移植2.1 底层移植方法2.1.1 移植原理2.1.2 移植方法 2.2 中间层移植方法2.2.1 移植原理2.2.2 移植方法 2.3 两种移植方法比对 3 结束语 前言 因为项目的需求或者成本控制等因素,我们经常会遇到更换MCU的情…

华硕 PRIME H610M-A D4 i5-12490F 1060电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件型号驱动情况 主板华硕 PRIME H610M-A D4(LPC Controller/eSPI Controller H610芯片组) 处理器12th Gen Intel Core i5-12490F 六核已驱动 内…

Mysql的重要知识点以及问题

查看索引的命令 show index from mytable 索引的原理 索引用来快速地寻找那些具有特定值的记录。如果没有索引,⼀般来说执行查询时遍历整张表。 索引的原理:就是把无序的数据变成有序的查询 把创建了索引的列的内容进行排序 对排序结果生成倒排表…

货运物流小程序开发功能有哪些?

移动互联网的深入发展让网购等线上交易更加盛行,货运快递物流也随之增多,成为我们日常生活的重要组成部分。传统的货运物流管理主要依赖人工,不仅效率慢还容易出错。随着市场的发展以及人们对服务质量要求的提高,现在很多中大型货…

Oracle 12c安装

前言 版本:12c第二版 检查弹出窗口程序,需要安装xmanager,并执行以下命令: xhost 192.168.194.91 安装步骤如下 安装必须的安装包: rpm -q bc binutils compat-libcap1 compat-libstdc-33 glibc glibc-devel ksh libaio libaio…

c++ 多态与虚函数

c中多态分为静态多态和动态多态,静态多态是函数重载,在编译阶段就能确定调用哪个函数。动态多态是由继承产生的,指不同的对象根据所接收的消息(成员函数)做出不同的反应。例如,动物都能发出叫声,但不同的动物能发出不同…

esp32之解析json

文章目录 前言一、json的作用二、json结构三、esp32 json解析安装库解析StaticJsonDocumentDynamicJsonDocument 四、解析今天的北京天气总结 前言 在现代Web开发中,JSON(JavaScript Object Notation)已成为常用的数据传输格式。ESP32是一款…

Netty 爱好者必看!一文详解 ChannelHandler 家族,助你快速掌握 Netty 开发技巧!

1 Channel 接口的生命周期 Channel 定义了一组和 ChannelInboundHandler API 密切相关的简单但功能强大的状态模型 1.1 Channel 的状态 状 态描 述ChannelUnregisteredChannel 已经被创建,但还未注册到 EventLoopChannelRegisteredChannel 已经被注册到了 EventL…

Wealth 开源的账本响应式网站系统免费部署

演示网站: https://wealth.willin.wang 前置准备 首先需要注册一个 Github 账号,Fork 这个开源项目: https://github.com/willin/wealth (欢迎 Star) 然后使用 Github 账号分别注册 Vercel 和 Planetscale&#xf…

【Linux 】 ps命令详解,查看进程pid

文章目录 ps概述ps语法指定pid进行查看 ps概述 ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。 ps 命令有多种不同的使用方法,这常常给初学者带来困惑。在各种 Linux 论坛上,询问 ps 命令语法的帖子屡…

双向链表--C语言实现数据结构

本期带大家一起用C语言实现双向链表🌈🌈🌈 文章目录 一、链表的概念🌎二、链表中数据元素的构成🌎 🌍三、链表的结构🌎 🌍 🌏四、 双向带哨兵位循环链表的实现&#x1f3…

ROS2 中 使用奥比中光 Orbbec Astra Pro 深度相机

本文将以 Ubuntu 20.04 和 ROS2 foxy 环境为例,详细介绍如何在 ROS2 中使用奥比中光 Orbbec Astra Pro 深度相机。在这一篇文章中,你会学到如何创建工作空间,使用 usb_cam 功能包,编译安装使用 ros_astra_camera 等。 文章目录 1.…

年薪50万的程序员和一般的中学教师相比,被亲戚看不起

我是一名程序员,已经工作五年,年薪大概有50万左右。然后,亲戚家的孩子是博士生,在一所中学教书,自己一年的工资可以抵达五六年的薪资,不过还是被亲戚给鄙视了。 很多人都持有不同的观点。我自己是一名程序…

vue-事件修饰符+键盘事件

事件修饰符 1、prevent&#xff1a; 阻止默认事件&#xff08;或在方法中使用e.preventDefault()&#xff09; <a hrefhttps://blog.csdn.net/weixin_52993364?typeblog click.preventshowInfo>点我</a> 说明&#xff1a;这样点击后就不会发生地址的跳转 2、s…