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 类 ...
最新文章
- bootstrap之div居中
- 老板请吃饭 | 李笑来约你聊聊垂直社区的产品和运营
- Win10卸载python总是提示error2503失败各种解决办法
- cassandra_Spring Boot Cassandra的第一步
- npm查找全局安装包命令
- c#基础数据操作之遍历DataTable并输出
- python 面试必问,不会真的要打脸~
- 实操教程 | 深度学习pytorch训练代码模板(个人习惯)
- 模式识别与机器学习---绪论
- R语言统计—配对t检验样本量计算
- 什么是串口并行,串口接行
- [llvm cookbook] 1、LLVM设计与使用
- 自动合并table中相同的单元格以及java自动合并excel相同单元格
- UNITY 5.2.1 发行说明 中文版
- cannot simultaneously fetch multiple bags 的解决方法
- linux_ rpm管理(Synaptic Package Manager)
- python gpib仪器控制_Python的扩展接口[0] - VISA仪器控制
- 2020.04.15软件构造听课笔记
- 【题解】【AcWing】1577. 条条大路通罗马
- ICLR 2021杰出论文奖公布,DeepMind是最大赢家