介绍

本系列录制的视频主要放在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死灵书笔记之引用与别名相关推荐

  1. 001-006 Rust死灵书笔记之非安全编程与数据布局

    介绍 本系列笔记是我录制Rust高级编程的系列笔记,在对第一二章录制时,采用的是xmind梳理知识点的形式,因此将第一二章的知识点集中放在此进行展示. 本系列录制的视频主要放在B站上Rust死灵书学习 ...

  2. 《rust死灵书》阅读笔记

    参考:介绍 - Rust 秘典(死灵书) 原图请点击链接查看:<rust死灵书> | ProcessOn免费在线作图,在线流程图,在线思维导图

  3. 008 Rust死灵书之生命周期

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust相关的源码资料在:https://github.com/anonymousGiga 笔记内容 今天我们跟大家聊一聊生命周期. 命周期 ...

  4. 026 Rust死灵书之实现Vec

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 从 ...

  5. 024 Rust死灵书之Send和Sync

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source S ...

  6. 023 Rust死灵书之并发、竞争

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 并 ...

  7. 2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码)

    2020-09-22C++学习笔记之引用1(1.引用(普通引用)2.引用做函数参数 3.引用的意义 4.引用本质5.引用结论 6.函数返回值是引用(引用当左值)7测试代码) 1.引用(普通引用) 变量 ...

  8. 032 Rust死灵书之Vec的IntoIter

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 详 ...

  9. 013 Rust死灵书之类型转换

    介绍 本系列录制的视频主要放在B站上Rust死灵书学习视频 Rust 死灵书相关的源码资料在https://github.com/anonymousGiga/Rustonomicon-Source 类 ...

最新文章

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

热门文章

  1. 【计算几何】求三角面和直线交点
  2. html表格不能横向自动展示,html table表格列数太多添加横向滚动条
  3. 优先级队列基本使用及用C++模拟实现
  4. markdown mermaid
  5. 做废20个账号才总结出的短视频运营干货
  6. AAA 及RADIUS协议配置
  7. 使用fairseq从头开始训练一个中英神经机器翻译模型
  8. Linux从头开始搭建Redis集群(三种方式)
  9. 架设游戏的服务器系统,架设游戏服务器需要备案吗
  10. 简单的位图转换矢量图方法