介绍

本系列录制的视频主要放在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. 计算机专业知识认识报告,计算机专业认识习报告.doc
  2. 看完这篇文章之后,终于明白了编译到底怎么回事。
  3. 前端开发 常用用的静态服务器
  4. C++中如何小数点后精确到两位输出
  5. quartz启动 mysql报错_quartz启动报错,本地是好的,部署到服务器就不行了,大神求助~~...
  6. 理解linux下的load
  7. ubuntu下C语言编程的注意点
  8. 王道考研操作系统笔记(第三章)附:王道考研408所有PPT和思维导图
  9. 条形码类型及其字符集和长度的说明
  10. 怎样修改MTK Scatter 文件
  11. 【矩阵论 图论】期末考试复习思维导图
  12. 计算机状态代码意义,DELL电脑自检代码错误提示含义
  13. php微信提现到零钱,PHP实现微信提现(企业付款到零钱)
  14. 阿基米德螺旋线原理及代码
  15. 大数据云计算学习路线
  16. 为什么ppt图形卡配置不正确_PPT:PowerPoint 检测到您的图形卡配置不正确,可能无法获得最佳幻灯片放映体验...
  17. springboot整合shiro无法加载静态资源
  18. 整理mysql面试题55题(含答案)
  19. 【C++】C/C++内存管理
  20. 正在同步文件夹收件箱中的服务器更改,Outlook2016 收件箱同步项目数不一致问题...

热门文章

  1. uniapp引入使用pixi.js遇到的坑
  2. 埃森哲报告解读 | 见微知著,把握中国消费市场新常态
  3. iOS自带地图纠偏问题
  4. “农业机械开发商”AMD的50年求生之路
  5. caffe 训练自己的数据 参考博客网址
  6. 带负荷测试要求二次最小电流_带负荷测向量简单分析方法
  7. 基于web的电影点评系统分析与设计
  8. 你觉得做程序员期间最开心的是什么?
  9. Alpha冲刺-第三天
  10. 【微服务】6、一篇文章学会使用 SpringCloud 的网关