当前位置: 首页 > news >正文

C++引用

这里写目录标题

  • 引用
    • 引用的基本使用
    • 引用做函数参数
    • 引用作为函数返回值
    • 引用的本质
    • 常量引用
  • 引用与指针的区别
  • &的三种作用

引用

引用的基本使用

作用: 给变量起别名
语法: 数据类型 &别名 = 原名

引用的本质是给变量起别名,因此,a、b都是同一个变量的名字,指向的是同一块地址空间

void ReferenceFunc()
{int a = 10;int &b = a;  //b是a的引用cout << "a = " << a << endl;cout << "b = " << b << endl;b = 100;cout << "a = " << a << endl;cout << "b = " << b << endl;
}

运行结果:
在这里插入图片描述

注意:
1、引用声明的时候必须初始化
2、同一个变量可以有多个引用
3、可以嵌套引用
4、引用声明之后,就不能再引用其他的变量了

void ReferenceFunc_basic()
{int a = 10;int &b = a; //int &c; //err, 引用必须初始化int aa = 20;b = aa;     //赋值操作,而不是更改引用 ===> 引用声明之后,就不能再引用其他的变量了cout << "a = " << a << "\ta的地址为:" << &a << endl;cout << "b = " << b << "\tb的地址为:" << &b << endl;int &c = a;int &d = a; //同一个变量可以有多个引用int &e = c; //e是c的引用,c又是a的引用===>引用可以嵌套cout << "a = " << a << "\ta的地址为:" << &a << endl;cout << "c = " << c << "\tc的地址为:" << &c << endl;cout << "e = " << a << "\te的地址为:" << &e << endl;
}

运行结果可以看出:1、b = aa; 是一个赋值操作,因为引用声明之后,就不能再引用其他的变量;2、a c e值相同,地址相同,所以c e 都是a的引用,可以嵌套定义
在这里插入图片描述

引用做函数参数

在三个函数的入参均为(10,20)的时候,通过不同的方式进行交换
在这里插入图片描述
结论:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单

引用作为函数返回值

作用:引用是可以作为函数的返回值存在的
注意:不要返回局部变量引用
用法:函数调用作为左值

int& fun01()
{int a = 12;return a;
}int& fun02()
{static int a = 12; return a;
}
void ReferenceFunc_return()
{//1、不要引用局部变量做返回值int &b = fun01();       //通过这句话,b就成为了a的引用,又因为a为局部变量,所以此时b实际上指的是非法空间cout << b << endl;cout << b << endl;cout << b << endl;//2、函数的调用可以作为左值int &ref = fun02();cout << "ref = " << ref << endl;cout << "ref = " << ref << endl;fun02() = 1000;cout << "ref = " << ref << endl;cout << "ref = " << ref << endl;}

在这里插入图片描述

引用的本质

本质:引用的本质在c++内部实现是一个指针常量
编译器发现是引用,自动转换为 int* const ref = &a; 即转换成为指针常量,指针常量是指针指向不可改,也说明为什么引用不可更改

int& ref = a;
ref = 20; // 内部发现ref是引用,自动帮我们转换为: *ref = 20

常量引用

引用必须是引用一块合法的内存空间,当右值为一个常量时,需要使用常量引用

1、常量引用的本质:加入const,编译器会优化代码为,int temp = 10; const int &c = temp;
2、常量引用不能修改所指向的值,类似于 const int * const p = &a; 此时指针 p 不能指向别处,也不能通过 *p 修改所指向内容的值
void ReferenceFunc_const()
{int a = 10;//int &b = 10;//err,引用必须是引用一块合法的内存空间,右值为一个常量const int &c = 10;//OK,使用常量引用c = 20;//err, const int &p <===>  const int * const p
}
void ShowVal(int &val)
{val = 1000;//changedcout << "被调函数 m = " << val << endl;
}void ShowVal2(const int &val)//常量引用 ==> 用来修饰形参,防止误操作
{//val = 1000; //err,不能修改常量引用cout << "被调函数 n = " << val << endl;
}
void ReferenceFunc_const()
{int m = 23;ShowVal(m);cout << "主调函数 m = " << m << endl;int n = 435;ShowVal2(n);cout << "主调函数 n = " << n << endl;
}

在这里插入图片描述

引用与指针的区别

1、引用声明就要初始化,指针不用初始化,例如可以声明:int *p = NULL;
2、引用不能指向其他变量,指针则可以任意指向。p = &a; p = &d;
3、引用不占存储空间,指针占空间
4、引用效率更高,指针是间接操作
5、引用更安全,指针可以偏移
指针更灵活,直接操作地址,指针更通用,C语言和C++都行

&的三种作用

声明变量的时候有&,表示引用
变量前边加&,表示取地址
数&数,表示位与运算

相关文章:

C++引用

这里写目录标题引用引用的基本使用引用做函数参数引用作为函数返回值引用的本质常量引用引用与指针的区别&的三种作用引用 引用的基本使用 作用&#xff1a; 给变量起别名 语法&#xff1a; 数据类型 &别名 原名 引用的本质是给变量起别名&#xff0c;因此&#xff0…...

YOLOv6-目标检测论文解读

文章目录摘要问题算法网络设计BackboneNeckHead标签分配SimOTA&#xff08;YOLOX提出&#xff09;&#xff1a;TAL&#xff08;Task alignment learning&#xff0c;TOOD提出&#xff09;损失函数分类损失框回归损失目标损失行业有用改进自蒸馏图像灰度边界填充量化及部署实验消…...

【factoryio】使用SCL编写 <机械手控制> 程序

使用虚拟工厂软件和博图联合仿真来编写【scl】机械手控制程序 文章目录 目录 文章目录 前言 二、程序编写 1.机械手运行部分 2.启动停止部分 3.急停复位部分 三、完整代码 总结 前言 在前面我们一起写过了许多案例控制的编写&#xff0c;在这一章我们一起来编写一下一个…...

QT学习记录散件

fromLocal8Bit() qt中fromLocal8Bit()函数可以设置编码。 因为QT默认的编码是unicode&#xff0c;不能显示中文的 而windows默认使用&#xff08;GBK/GB2312/GB18030&#xff09; 所以使用fromLocal8Bit()函数&#xff0c;可以实现从本地字符集GB到Unicode的转换&#xff0c;从…...

[SSD科普之1] PCIE接口详解及应用模式

PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准&#xff0c;它原来的名称为“3GIO”&#xff0c;是由英特尔在2001年提出的&#xff0c;旨在替代旧的PCI&#xff0c;PCI-X和AGP总线标准。一、PCI-E x1/x4/x8/x16插槽模式PCI-E有 x1/…...

Linux设备驱动模型与 sysfs实现分析

RTOS和Linux系统上开发驱动的方式非常的不同,在RTOS系统下,驱动和驱动之间并没有实质性的联系,不同的驱动和BSP之间仅仅通过一层很薄很薄的设备管理框架聚合在一起构成RTOS的设备管理子系统。图形化表示如下: 设备驱动&BSP之间互相独立,互不影响,互不依赖,独立实现,…...

软考高级之制定备考计划

制定备考计划 高项准备时间最好是三个月以上&#xff0c;分为三个阶段来复习。 第一个阶段——熟悉知识点 第二个阶段——刷题 第三个阶段——冲刺复习 具体操作 第一个阶段 这个阶段的复习以教材和视频为主&#xff0c;掌握重要知识点。基础知识要打牢。例如&#xff1…...

[Pytorch] Linear层输出nan

参考链接&#xff1a; https://discuss.pytorch.org/t/well-formed-input-into-a-simple-linear-layer-output-nan/74720/11 总结原因&#xff1a; numpy需要更新 PS. 查看numpy版本号 打开Anaconda Prompt 进入环境 输入命令conda activate envname 然后输入pip show numpy…...

2023-2-19-What is ‘ template<typename E, E V> ‘?

目录C里面template怎么用inline函数模板类模板函数模板特化C里面template怎么用 template是什么? template其实是C的一种语法糖&#xff0c;本意是去简化程序员的工作. void swap(int *a,int *b){int temp *a;*a *b;*b temp; }比如在写一个交换函数的的时候,参数为两个in…...

华为OD机试题 - 字符串加密(JavaScript)

最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...

美团前端一面手写面试题

实现斐波那契数列 // 递归 function fn (n){if(n0) return 0if(n1) return 1return fn(n-2)fn(n-1) } // 优化 function fibonacci2(n) {const arr [1, 1, 2];const arrLen arr.length;if (n < arrLen) {return arr[n];}for (let i arrLen; i < n; i) {arr.push(arr[…...

2D图像处理:缺陷检测--仿照Halcon的Variation Model

文章目录 基于 C++&Opencv 的检测结果(Robust模式-MAD)一、Variation Model1.1 准备和训练模型方法1.2 比较模板方法1.3 过滤(保留符合缺陷特征的区域)二、参考基于 C++&Opencv 的检测结果(Robust模式-MAD) 一、Variation Model Halcon中的Variation Model主要是将待…...

JavaScript 注释

JavaScript 注释可用于提高代码的可读性。JavaScript 注释JavaScript 不会执行注释。我们可以添加注释来对 JavaScript 进行解释&#xff0c;或者提高代码的可读性。单行注释以 // 开头。本例用单行注释来解释代码&#xff1a;实例// 输出标题&#xff1a;document.getElementB…...

浅谈使用CDN加速的OSS

目录引出OSS对象存储服务CDNCDN加速OSS资源总结引出 之前&#xff0c;我在写项目的时候&#xff0c;因为项目中存在音视频的存储&#xff0c;然后我看圈子里面的人都是使用OSS对象存储来处理&#xff0c;然后我也跟风去使用了&#xff0c;然后在之后&#xff0c;我一个朋友问我…...

华为OD机试题 - 服务依赖(JavaScript)

最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...

整合K8s+SpringCloudK8s+SpringBoot+gRpc

本文使用K8s当做服务注册与发现、配置管理&#xff0c;使用gRpc用做服务间的远程通讯一、先准备K8s我在本地有个K8s单机二、准备service-providerpom<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.…...

Django框架之模型视图--HttpResponse对象

HttpResponse对象 视图在接收请求并处理后&#xff0c;必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建&#xff0c;HttpResponse对象由开发人员创建。 1 HttpResponse 可以使用django.http.HttpResponse来构造响应对象。 HttpResponse(content响应体, con…...

Linux下的Jenkins安装教程

当前环境 CentOS 7.8Java 11&#xff08;注意当前jenkins支持的Java版本最低为Java11&#xff09;FinalShell 3.9&#xff08;操作环境&#xff09; 安装Jenkins PS&#xff1a;不建议使用Docker安装Jenkins&#xff0c;因为使用Jenkins的时候一般会调用外部程序&#xff0c;…...

[软件工程导论(第六版)]第5章 总体设计(课后习题详解)

文章目录1. 为每种类型的模块耦合举一个具体例子。2. 为每种类型的模块内聚举一个具体例子。3. 用面向数据流的方法设计下列系统的软件结构。4. 美国某大学共有200名教师&#xff0c;校方与教师工会刚刚签订一项协议。按照协议&#xff0c;所有年工资超过$26000&#xff08;含$…...

力扣62.不同路径

文章目录力扣62.不同路径题目描述方法1&#xff1a;暴力深搜(超时未通过)方法2&#xff1a;动态规划力扣62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...