007 Rust死灵书笔记之引用与别名
介绍
本系列录制的视频主要放在B站上Rust死灵书学习视频
Rust相关的源码资料在:https://github.com/anonymousGiga
笔记内容
引用与别名
在Rust中,存在两种引用类型,分别是:
- 引用
- 借用(也就是可变引用)
遵循规则:
- 引用的生命周期不能超过被引用的内容(原因:Rust中内存在拥有它的变量离开作用域后就被自动释放)
- 可变引用不能存在别名
下面通过代码阐述:
fn main() {//1、引用的生命周期不能超过被引用的内容let a = String::from("This is a!");let mut b = &a;{let c = String::from("This is c!");b = &c;println!("reference c: {}", b);}//println!("reference c: {}", b);println!("Hello, world!");
}
//2、可变引用不存在别名:这里的别名的定义同C++中别名的定义,而不是说的类型别名
//例如c++中,别名:int a = 10; int &b = a; b为a的别名
//原因://考虑如下函数:
//fn compute(input: &u32, output: &mut u32) {
// if *input > 10 {
// *output = 1;
// }
// if *input > 5 {
// *output *= 2;
// }
//}//可能的优化:
fn compute(input: &u32, output: &mut u32) {let cached_input = *input; // 将*input放入缓存if cached_input > 10 {*output = 1; // x > 10 则必然 x > 5,所以直接加倍并立即退出} else if cached_input > 5 {*output *= 2;}
}
//如果存在别名,则会如下:
// // input == output == 0xabad1dea
// // *input == *output == 20
//if *input > 10 { // true (*input == 20)
// *output = 1; // also overwrites *input, because they are the same
//}
//if *input > 5 { // false (*input == 1)
// *output *= 2;
//}
// // *input == *output == 1//所以,这就是为什么Rust不允许别名存在的原因
007 Rust死灵书笔记之引用与别名相关推荐
- 001-006 Rust死灵书笔记之非安全编程与数据布局
介绍 本系列笔记是我录制Rust高级编程的系列笔记,在对第一二章录制时,采用的是xmind梳理知识点的形式,因此将第一二章的知识点集中放在此进行展示. 本系列录制的视频主要放在B站上Rust死灵书学习 ...
- 《rust死灵书》阅读笔记
参考:介绍 - Rust 秘典(死灵书) 原图请点击链接查看:<rust死灵书> | ProcessOn免费在线作图,在线流程图,在线思维导图
- 008 Rust死灵书之生命周期
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust相关的源码资料在:https://github.com/anonymousGiga 笔记内容 今天我们跟大家聊一聊生命周期. 命周期 ...
- 026 Rust死灵书之实现Vec
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 从 ...
- 024 Rust死灵书之Send和Sync
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source S ...
- 023 Rust死灵书之并发、竞争
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 并 ...
- 2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码)
2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码) 1.引用(普通引用) 变量 ...
- 032 Rust死灵书之Vec的IntoIter
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 详 ...
- 013 Rust死灵书之类型转换
介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 类 ...
最新文章
- 计算机专业知识认识报告,计算机专业认识习报告.doc
- 看完这篇文章之后,终于明白了编译到底怎么回事。
- 前端开发 常用用的静态服务器
- C++中如何小数点后精确到两位输出
- quartz启动 mysql报错_quartz启动报错,本地是好的,部署到服务器就不行了,大神求助~~...
- 理解linux下的load
- ubuntu下C语言编程的注意点
- 王道考研操作系统笔记(第三章)附:王道考研408所有PPT和思维导图
- 条形码类型及其字符集和长度的说明
- 怎样修改MTK Scatter 文件
- 【矩阵论 图论】期末考试复习思维导图
- 计算机状态代码意义,DELL电脑自检代码错误提示含义
- php微信提现到零钱,PHP实现微信提现(企业付款到零钱)
- 阿基米德螺旋线原理及代码
- 大数据云计算学习路线
- 为什么ppt图形卡配置不正确_PPT:PowerPoint 检测到您的图形卡配置不正确,可能无法获得最佳幻灯片放映体验...
- springboot整合shiro无法加载静态资源
- 整理mysql面试题55题(含答案)
- 【C++】C/C++内存管理
- 正在同步文件夹收件箱中的服务器更改,Outlook2016 收件箱同步项目数不一致问题...