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

博罗做网站网站模板建站公司

博罗做网站,网站模板建站公司,网站建设服务费的会计处理,仿银行网站 asp喜欢的话别忘了点赞、收藏加关注哦#xff08;加关注即可阅读全文#xff09;#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵#xff01;(#xff65;ω#xff65;) 这篇文章只对所有权进行简单回顾#xff0c;想要看完整的所有权系统阐述见【Rust自学】专栏…喜欢的话别忘了点赞、收藏加关注哦加关注即可阅读全文对接下来的教程有兴趣的可以关注专栏。谢谢喵(ω) 这篇文章只对所有权进行简单回顾想要看完整的所有权系统阐述见【Rust自学】专栏的第15章的文章。 1.10.1. 引用 通过引用Rust允许将值借用出去但不放弃所有权。 引用就是带有附加合约的指针。Rust中一共有两种引用类型。 1. 共享的引用 共享的引用又叫不可变的引用Rust中写作T其中T指代类型。 它的特点在一可以同时或者叫在同一作用域内存在任意数量的引用指向同一个值。每个共享的引用都实现了Copy trait。 共享引用背后的值不可变。编译器允许假定共享引用指向的值在该引用存货期间是不会改变的。 举个例子一个共享引用的值在某函数内被多次读取那编译器就有权让其只读取一次然后重用读取的值。 2. 可变引用 与不可变引用相对的就是可变引用在Rust中写作mut T。 可变引用是独占的意味着在一个作用域内只能有一个可变引用不能出现第二个可变引用或任意数量的共享引用。所以不可变引用没有实现Copy trait。 编译器会假定没有其它线程访问可变引用所指向的类型无论是通过共享引用还是可变引用。 1.10.2. 拥有值 vs. 拥有到值的可变引用 所有者需要对删除值丢弃值负责除此之外两者的作用基本一样。 注意如果你移动了可变引用背后的值则必须在其位置上留下另一个值。如果不这样做所有者会认为它需要将其删除丢弃但其实却没有值可以删除了导致未定义行为或编译错误。 看个例子 fn main() {let mut s String::from(Hello);let r mut s;let t *r; // 试图移动 r 所指向的值println!({}, r); // r 变成了悬垂引用 }输出 error[E0507]: cannot move out of *r which is behind a mutable reference我们来梳理一下过程 r是 s的可变引用而 *r的操作试图移动这个值String类型没有实现Copy trait意味着s会失去数据由于s仍然存在当s作用域结束时Rust期望可以正常释放它的内存但s已经被移动走了导致Rust不知道该如何正确释放它从而引发编译错误 正确的做法 fn main() {let mut s String::from(Hello);let r mut s;let t std::mem::replace(r, String::new()); // 用空字符串替换原值println!({}, t); // Helloprintln!({}, s); // }1.10.3. 内部可变性 一些类型提供了内部可变性这些类型可以通过共享引用修改值。 这些类型通常依赖于额外的机制如原子CPU指令或不变量来提供安全的可变形而不依赖于独占引用的语义。 内部可变性分为两类 通过共享引用获得可变引用:Mutex、RefCell这两者在【Rust自学】专栏的第15章的文章中都介绍过 这类类型提供了保障机制——如果对某个值提供了可变引用那么同时或者叫在同一作用域下只会存在一个可变引用并且没有共享引用。这种功能依赖于UnsafeCell类型通过共享引用修改值的唯一正确方式。 通过共享引用可以替换值:std::sync::atomic、std::cell::Cell 这类类型没有提供可变引用到内部的值但是提供了就地操作值的方法——比如说替换/读取一个值。例如无法获得到usize或i32的直接引用但是可以读取和替换值。 1.10.4. Cell类型 Cell类型来自于标准库它通过不变量实现内部可变性。 Cell类型无法跨线程共享因为内部值不会被并发地修改即使通过共享引用发生修改不会提供到Cell内部的值的引用所以可以一直移动它 Cell提供的方法 对值整体替换也就是所谓的就地操作返回值的副本也就是读取 1. set(value): 替换值 use std::cell::Cell;fn main() {let x Cell::new(10); // 创建一个 Cell存储 10x.set(20); // 替换内部值println!(Updated value: {}, x.get()); // 输出 20 }set(value)用新值替换Cell内部的值 2. get():返回值的副本 use std::cell::Cell;fn main() {let x Cell::new(5);let y x.get(); // 获取 x 内部的副本println!(Value: {}, y); // 输出 5 }get()不会返回内部值的引用而是返回值的副本适用于实现Copy trait 的类型。适用于i32、bool等实现Copy trait 的类型。
http://www.w-s-a.com/news/61185/

相关文章:

  • 自建网站软件网站如何减少404跳转
  • 我想学制作网站吗公司起名网站十大排名
  • 广州白云手机网站建设淘宝店铺怎么推广
  • 青海省住房与城乡建设厅网站珠海高端网站制作公司
  • 深圳个性化建网站公司简便网站建设
  • 网站安全狗十大免费ppt网站在线
  • 进网站后台显示空白图片模板 网站源码
  • dedecms 英文网站怎么在网站上做模式题库
  • 轻网站怎么建立国外做评论的网站
  • 拉米拉网站建设乐清网站网站建设
  • 获取网站全站代码申请免费域名的方法
  • 网站制作建设公司哪家好wordpress仪表盘打不开
  • 最佳网站制作模板用手机能创建网站吗
  • 只做黑白摄影的网站网站建设好后给领导作介绍
  • 移动手机网站建设如何做网站地图视频
  • 手工业网站怎么做成都酒吧设计公司
  • .net 网站生成安装文件目录重庆网站建设沛宣网络
  • 怎么做钓鱼网站吗百度免费域名注册网站
  • 如何给网站做外部优化今年国内重大新闻
  • 有没有做生物科技相关的网站弄一个app大概多少钱
  • 五金加工东莞网站建设怎么做网页跳转
  • 淄博网站优化价格wordpress没有小工具
  • 自己搭建服务器做视频网站wordpress发布文章 发布
  • php仿博客园网站阅读分享网站模板
  • 网站宣传的劣势域名注册长沙有限公司
  • 怎样联系自己建设网站企业怎样做好网站建设
  • 网站制作需求分析电商网站建设浩森宇特
  • 淄博网站建设招聘摄影网站建设的论文
  • 怎么把凡科网里做的网站保存成文件网站建设研究的意义
  • 服务器2003怎么做网站网站建设服务器的配置