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

左值引用和右值引用

目录

辨析引用和指针

代码段

定义引用变量的技巧

同一内存

指针和引用的简单运用

辨析两类指针

数组、指针、引用

辨析左值引用和右值引用

代码段

左值引用和右值引用


辨析引用和指针

1、引用是一种更安全的指针

说明:引用必须初始化,而指针可能是野指针

2、引用必须初始化,指针可以不初始化

3、引用只有一级引用,没有多级引用;指针有一级指针,也有多级指针

4、定义一个引用变量和定义一个指针变量的汇编指令是相同的

通过引用修改内存值和通过指针解引用修改内存值的底层指令也是相同的

代码段

定义引用变量的技巧

// 定义引用变量的技巧// 首先,定义一个指针变量
int a = 1;
int * p = &a;
// 然后,将&符号移动到*符号的位置,覆盖*符号
int a = 1;
int & p = a;
// int * p = &a;  =>  int & p = a;
// 按照这种方式,最终p是一个引用变量

同一内存

// 同一内存#include<iostream>
using namespace std;int main()
{int a = 1;int * p = &a;int & b = a;// a、*p、b属于同一内存*p = 2;cout << a << " " << *p << " " << b << endl;b = 3;cout << a << " " << *p << " " << b << endl;cout << "总结:a、*p、b属于同一内存" << endl;return 0;
}/*
2 2 2
3 3 3
总结:a、*p、b属于同一内存
*/

指针和引用的简单运用

// 指针和引用的简单运用#include<iostream>
using namespace std;void swap1(int * a, int * b)
{int t = *a;*a = *b;*b = t;
}void swap2(int & a, int & b)
{int t = a;a = b;b = t;
}int main()
{int x = 1;int y = 2;cout << "使用swap1()之前:x的值为" << x << ",y的值为" << y << endl;swap1(&x, &y);cout << "使用swap1()之后:x的值为" << x << ",y的值为" << y << endl;swap2(x, y);cout << "再使用swap2()之后:x的值为" << x << ",y的值为" << y << endl;return 0;
}/*
使用swap1()之前:x的值为1,y的值为2
使用swap1()之后:x的值为2,y的值为1
再使用swap2()之后:x的值为1,y的值为2
*/

辨析两类指针

// 辨析两类指针#include<iostream>
using namespace std;int main()
{int array[5] = { };int * p = array;int (* q)[5] = &array;return 0;
}/*指针p
指针p初始化为指向数组array的第一个元素的地址,即array[0]的地址
指针p存储了array的起始地址指针q
指针q初始化为指向整个数组array的地址(使用括号来明确类型)
指针q存储了整个数组array的地址两者的区别
p是一个指向单个int元素的指针,而q是一个指向整个int[5]数组的指针
p可以逐个访问数组元素。例如,p++将指向array的下一个元素
q作为指向整个数组的指针,可以用于传递和处理整个数组,也可以通过解引用来访问整个数组*/

数组、指针、引用

// 数组、指针、引用#include<iostream>
using namespace std;int main()
{int array[5] = { };int * p = array;cout << sizeof array << endl; // 20cout << sizeof p << endl;     // 8int (& q)[5] = array;// 定义引用变量q来引用array数组,q相当于array的别名// int (* q)[5] = &array;  =>  int (& q)[5] = array;cout << sizeof q << endl; // 20return 0;
}/*
20
8
20
*//*
关于输出结果的说明1、sizeof运算符用于获取对象或类型的大小(以字节为单位)
2、对于sizeof array,数组 array 的大小取决于数组中的元素数量和元素类型的大小
在本例中,array是一个具有5个int元素的数组
每个int类型的大小通常是4字节(具体的大小可能因编译器和平台而异)
因此,sizeof array返回20
3、对于sizeof p,指针p的大小通常是机器字长相关的
即在64位系统中,指针大小为8字节;
在32位系统中,指针大小为4字节
4、q相当于array的别名
因此,sizeof q等于sizeof array,同为20
*/

辨析左值引用和右值引用

左值:有内存,有名字,值可变

右值:没内存,没名字,值不变

左值引用

允许使用替代名称来访问同一对象

右值引用

C++11提供的右值引用专门用于引用右值

注意!右值引用变量本身是左值

代码段

左值引用和右值引用

// 左值引用和右值引用#include<iostream>
using namespace std;int main()
{int a = 1;int & r1 = a; // 左值引用r1int && r2 = 9; // 右值引用r2// 以后还可以给r2赋值,例如:r2 = 2;// 关于int && r2 = 9;// 首先,产生一个值为9的临时量// 然后,将临时量的地址记录到r2的内存中// int & r3 = 3;    // 错误!const int & r3 = 3; // 正确!// 以后不能给r3赋值// 关于const int & r3 = 3; // 首先,产生一个值为3的临时量// 然后,将临时量的地址记录到r3的内存中// 这些步骤和右值引用步骤相同int & r4 = r2;// 注意!右值引用变量本身是左值// 不能用右值引用变量来引用左值// 所以需要使用 左值引用变量 来引用 右值引用变量return 0;
}

相关文章:

左值引用和右值引用

目录 辨析引用和指针 代码段 定义引用变量的技巧 同一内存 指针和引用的简单运用 辨析两类指针 数组、指针、引用 辨析左值引用和右值引用 代码段 左值引用和右值引用 辨析引用和指针 1、引用是一种更安全的指针 说明&#xff1a;引用必须初始化&#xff0c;而指针可…...

JavaWeb 中对 HTTP 协议的学习

HTTP1 Web概述1.1 Web和JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 1.3 Web核心 2 HTTP2.1 简介2.2 请求数据格式2.2.1 格式介绍2.2.2 实例演示 2.3 响应数据格式2.3.1 格式介绍2.3.2 响应状态码2.3.…...

06-hadoop集群搭建(root用户)

搭建Hadoop集群流程 环境准备 1、基础环境的搭建&#xff08;内网封火墙关闭、主机名、规划好静态ip、hosts映射、时间同步ntp、jdk、ssh免密等&#xff09; 2、Hadoop源码编译&#xff08;为了适应不同操作系统间适配本地库、本地环境等&#xff09; 3、Hadoop配置文件的修…...

MySQL 窗口函数是什么,有这么好用

先看这段像天书一样的 SQL ,看着就头疼。 SELECTs1.name,s1.subject,s1.score,sub.avg_score AS average_score_per_subject,(SELECT COUNT(DISTINCT s2.score) 1 FROM scores s2 WHERE s2.score > s1.score) AS score_rank FROM scores s1 JOIN (SELECT subject, AVG(sco…...

用户数据报协议UDP

UDP的格式 载荷存放的是:应用层完整的UDP数据报 报头结构: 源端口号:发出的信息的来源端口目的端口号:信息要到达的目的端口UDP长度:2个字节(16位),即UDP总长度为:2^16bit 2^10bit * 2^6bit 1KB * 64 64KB.所以一个UDP的最大长度为64KBUDP校验和:网络的传输并非稳定传输,…...

STM32F429IGT6使用CubeMX配置外部中断按键

1、硬件电路 2、设置RCC&#xff0c;选择高速外部时钟HSE,时钟设置为180MHz 3、配置GPIO引脚 4、NVIC配置 PC13相同 5、生成工程配置 6、部分代码 中断回调函数 /* USER CODE BEGIN 0 */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if(GPIO_Pin GPIO_PIN_0){HAL_GPIO…...

时序预测 | Python实现LSTM长短期记忆网络时间序列预测(电力负荷预测)

时序预测 | Python实现LSTM长短期记忆网络时间序列预测(电力负荷预测) 目录 时序预测 | Python实现LSTM长短期记忆网络时间序列预测(电力负荷预测)效果一览基本描述模型结构程序设计参考资料效果一览...

[开发|前端] 路由守卫笔记

描述 vue-router提供的导航跳转或取消的api。 router.beforeEach 切换路由前调用 router.beforeResolve 组件内路由守卫解析之后调用&#xff0c;和beforeEach用法类似 router.afterEach 切换后调用 全局路由守卫有上面3个&#xff0c;调用时机不同 路由守卫都有3个参数 …...

网络基础——网络的由来与发展史

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、网络的由来 二、计算机网络的发展史 1、第一阶段 2、第二阶段 3、第三阶段 前言 每天都是使用网络&#xff0c;那么你知道网络…...

八数码(bfs)

思路&#xff1a; &#xff08;1&#xff09;用string来存储状态&#xff0c;用d<string,int>来记录状态变换次数&#xff1b; &#xff08;2&#xff09;在bfs过程中&#xff0c;先初始化&#xff08;q,d)&#xff1b;每次拿出队头状态&#xff0c;得到x的相对位置&am…...

CCLINK IE FIELD BASIC转MODBUS-TCP网关cclink与以太网的区别

协议的不同&#xff0c;数据读取困难&#xff0c;这是很多生产管理系统的难题。但是现在&#xff0c;捷米JM-CCLKIE-TCP通讯网关&#xff0c;让这个问题变得非常简单。这款通讯网关可以将各种MODBUS-TCP设备接入到CCLINK IE FIELD BASIC网络中&#xff0c;连接到MODBUS-TCP总线…...

【Rust】Rust学习 第十一章编写自动化测试

Rust 是一个相当注重正确性的编程语言&#xff0c;不过正确性是一个难以证明的复杂主题。Rust 的类型系统在此问题上下了很大的功夫&#xff0c;不过它不可能捕获所有种类的错误。为此&#xff0c;Rust 也在语言本身包含了编写软件测试的支持。 编写一个叫做 add_two 的将传递…...

关于使用pycharm遇到只能使用unittest方式运行,无法直接选择Run

相信大家可能都遇到过这个问题&#xff0c;使用pycharm直接运行脚本的时候&#xff0c;只能选择unittest的方式&#xff0c;能愁死个人 经过几次各种尝试无果之后&#xff0c;博主就放弃死磕了&#xff0c;原谅博主是个菜鸟 后来遇到这样的问题&#xff0c;往往也就直接使用cm…...

Docker+rancher部署SkyWalking8.5并应用在springboot服务中

1.Skywalking介绍 Skywalking是一个国产的开源框架&#xff0c;2015年有吴晟个人开源&#xff0c;2017年加入Apache孵化器&#xff0c;国人开源的产品&#xff0c;主要开发人员来自于华为&#xff0c;2019年4月17日Apache董事会批准SkyWalking成为顶级项目&#xff0c;支持Jav…...

代码随想录第45天 | 322. 零钱兑换、279. 完全平方数

322. 零钱兑换 动规五部曲分析如下&#xff1a; 确定dp数组以及下标的含义 dp[j]&#xff1a;凑足总额为j所需钱币的最少个数为dp[j] 确定递推公式 凑足总额为j - coins[i]的最少个数为dp[j - coins[i]]&#xff0c;那么只需要加上一个钱币coins[i]即dp[j - coins[i]] 1就是…...

怎么加入Microsoft Cloud Partner Program?

目录 前言 加入Microsoft Cloud Partner Program 1、注册成为微软合作伙伴 2、完成合作伙伴资格要求...

LNMP简易搭建

目录 前言 一、拓扑图 二、NGINX配置 三、配置MySQL 四、配置php环境 五、部署应用 总结 前言 LNMP平台指的是将Linux、Nginx、MySQL和PHP&#xff08;或者其他的编程语言&#xff0c;如Python、Perl等&#xff09;集成在一起的一种Web服务器环境。它是一种常用的开发和部署网…...

CClink IE转Modbus TCP网关连接三菱FX5U PLC

捷米JM-CCLKIE-TCP 是自主研发的一款 CCLINK IE FIELD BASIC 从站功能的通讯网关。该产品主要功能是将各种 MODBUS-TCP 设备接入到 CCLINK IE FIELD BASIC 网络中。 捷米JM-CCLKIE-TCP网关连接到 CCLINK IE FIELD BASIC 总线中做为从站使用&#xff0c;连接到 MODBUS-TCP 总线…...

PyTorch 微调终极指南:第 1 部分 — 预训练模型及其配置

一、说明 如今&#xff0c;在训练深度学习模型时&#xff0c;通过在自己的数据上微调预训练模型来迁移学习已成为首选方法。通过微调这些模型&#xff0c;我们可以利用他们的专业知识并使其适应我们的特定任务&#xff0c;从而节省宝贵的时间和计算资源。本文分为四个部分&…...

GO学习之 微框架(Gin)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...

突破Twitter数据采集壁垒:无需API密钥的Go语言解决方案

突破Twitter数据采集壁垒&#xff1a;无需API密钥的Go语言解决方案 【免费下载链接】twitter-scraper Scrape the Twitter frontend API without authentication with Golang. 项目地址: https://gitcode.com/gh_mirrors/twi/twitter-scraper 还在为Twitter API的复杂申…...

B站爬虫实战:手把手教你破解w_rid签名与oid参数(附完整Python代码)

B站数据采集实战&#xff1a;深度解析w_rid签名与oid参数生成机制 每次打开B站评论区&#xff0c;那些海量的用户互动数据背后&#xff0c;都藏着开发者们最想破解的秘密。作为国内最大的年轻人文化社区&#xff0c;B站的数据价值不言而喻&#xff0c;但它的防护机制也让不少爬…...

灵性觉知创造实相:你每天的念头,都在悄悄“画”你的人生

你有没有过这样的体验&#xff1f; 心情好时&#xff0c;路上遇到陌生人都会对你笑&#xff0c;连下雨都觉得浪漫&#xff1b;心情差时&#xff0c;刚买的奶茶洒了、手机没电&#xff0c;都觉得“今天真倒霉”。其实这背后藏着一个简单却重要的真相&#xff1a;你关注什么、相…...

终极指南:3步打造专属生日祝福网页,无需编程也能创造惊喜

终极指南&#xff1a;3步打造专属生日祝福网页&#xff0c;无需编程也能创造惊喜 【免费下载链接】happy-birthday Wish your friend/loved-ones happy birthday in a nerdy way. 项目地址: https://gitcode.com/gh_mirrors/ha/happy-birthday 还在为生日祝福缺乏创意而…...

GTA V终极安全增强指南:YimMenu如何打造专业级游戏保护体验

GTA V终极安全增强指南&#xff1a;YimMenu如何打造专业级游戏保护体验 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi…...

3步彻底清理Windows系统:Bulk Crap Uninstaller批量卸载工具终极指南

3步彻底清理Windows系统&#xff1a;Bulk Crap Uninstaller批量卸载工具终极指南 【免费下载链接】Bulk-Crap-Uninstaller Remove large amounts of unwanted applications quickly. 项目地址: https://gitcode.com/gh_mirrors/bu/Bulk-Crap-Uninstaller 在Windows系统中…...

FigmaCN中文插件:终极指南让Figma设计更简单高效

FigmaCN中文插件&#xff1a;终极指南让Figma设计更简单高效 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma复杂的英文界面而烦恼吗&#xff1f;每天面对"Frame"…...

5分钟搞定!nanobot超轻量级AI助手快速部署与基础功能体验

5分钟搞定&#xff01;nanobot超轻量级AI助手快速部署与基础功能体验 1. 引言&#xff1a;为什么选择nanobot&#xff1f; 如果你正在寻找一个轻量级但功能强大的AI助手&#xff0c;nanobot绝对值得一试。这个仅用4000行代码实现的AI助手&#xff0c;比传统方案小了99%&#…...

GNU Radio 3.8 OOT模块开发避坑指南:从gr_modtool到CMake编译的完整流程

GNU Radio 3.8 OOT模块开发深度排雷手册&#xff1a;从工具链配置到版本兼容性实战 在软件无线电(SDR)开发领域&#xff0c;GNU Radio作为开源标杆工具链&#xff0c;其Out-of-Tree(OOT)模块扩展机制为开发者提供了高度灵活性。本文将聚焦3.8版本下的OOT开发全流程&#xff0c;…...

Qwen3-4B模型入门教程:部署后如何确认服务正常并开始使用?

Qwen3-4B模型入门教程&#xff1a;部署后如何确认服务正常并开始使用&#xff1f; 1. 教程目标与准备工作 刚部署完Qwen3-4B模型&#xff0c;你可能会有这样的疑问&#xff1a;服务真的跑起来了吗&#xff1f;怎么知道模型已经准备好接受请求了&#xff1f;本教程将带你一步步…...