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

设计师浏览网站杭州seo网站排名优化

设计师浏览网站,杭州seo网站排名优化,服装网站搭建计划书,广州建筑集团有限公司品牌Rust基础[part5]_引用 不可变引用:通过不可变引用,可以读取变量,但是不能够修改数据。一个变量可以有多个不可变引用,但不能与可变引用共存。可变引用:通过可变引用,可以读取和修改数据。一个变量在某一时刻…

Rust基础[part5]_引用

  • 不可变引用:通过不可变引用,可以读取变量,但是不能够修改数据。一个变量可以有多个不可变引用,但不能与可变引用共存。
  • 可变引用:通过可变引用,可以读取和修改数据。一个变量在某一时刻只能有一个可变引用,且不能与不可变引用共存。

引用规则

  • 同一时间(生命周期)内,一个变量只能有一个可变引用或多个不可变引用
    • 多个不可变引用可以共存
    • 可变引用必须是独占的(不能与其他引用共存)
  • 引用必须总是有效(Rust保证引用永远不会指向无效内存)

示例1:错误示范

pub fn reference_example() {let mut s: String = String::from("Hello");// 创建不可变引用let s1: &String = &s;// 创建可变引用(错误:此时s已有不可变引用)let s2: &mut String = &mut s;// 错误:不能创建多个可变引用let s3: &mut String = &mut s;// 错误:同一生命周期内同时使用不可变和可变引用println!("s1: {}, s2: {}", s1, s2); 
}

示例 2:正确示范

pub fn reference_example() {let mut s: String = String::from("Hello");// 第一阶段:仅使用不可变引用let s1: &String = &s;println!("s1: {}", s1); // s1在此处不再使用// 第二阶段:创建可变引用(s1已不再活跃)let s2: &mut String = &mut s;println!("s2: {}", s2);
}

切片(Slices)

数组切片

 let a = [1, 2, 3];let b = & a[0..1];let c = & a[0..=1];

字符串切片

是对字符串部分内容的引用

// 字符串引用let s = String::from("Hello, Rust!");let slice1: &str = &s[0..5]; // "Hello"let slice2: &str = &s[7..]; // "Rust!"let slice3: &str = &s[..]; // "Hello, Rust!"

悬垂引用(Dangling Reference)

生命周期核心规则:引用的生命周期必须 ≤ 被引用对象的生命周期

错误示例1:

pub fn dangling_pointer_example() {let r: &String;{let s = String::from("Hello"); // s的生命周期仅在{}内r = &s;                        // r引用s,但s即将被销毁} // s在此处被释放println!("r: {}", r); // 错误:r引用的s已不存在(悬垂引用)
}

关键点

  • s的生命周期:从创建到}结束。
  • r的生命周期:从创建到函数结束(覆盖s的生命周期)。
  • 错误原因r存活时间超过s,导致引用无效。

错误示例2:

fn get_a() -> &String { // 错误:返回局部变量的引用let s = String::from("a");&s // 函数结束后s被销毁,引用悬空
}

关键点

  • 返回引用的合法性:只能返回参数全局变量的引用,不能返回局部变量的引用。

正确示例:

生命周期注解(Lifetime Annotation)

pub fn lifetime_example() {let large = longest("a", "ab");println!("The longest string is: {}", large);// 生命周期注解:确保返回的引用与参数生命周期一致fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {if x.len() > y.len() { x } else { y }}
}

关键点

  • 'a的含义:参数xy以及返回值的引用必须至少存活到'a结束
  • 编译器检查
    1. 验证xy的实际生命周期是否满足'a
    2. 确保返回值的生命周期不超过'a
  • 实际效果:返回的引用在调用者的作用域内有效(如large的生命周期覆盖longest的调用)。

总结:避免悬垂引用的3种方式

  1. 返回所有权(如fn get_a() -> String):转移值的控制权,无需引用。
  2. 引用外部变量(如fn get_a(s: &String) -> &String):确保被引用对象生命周期足够长。
  3. 生命周期注解(如fn longest<'a>(x: &'a str) -> &'a str):明确引用的合法存活范围。
http://www.dtcms.com/wzjs/276539.html

相关文章:

  • 江西南昌电子商务网站建设公司企业搜索引擎优化
  • 怎么查一个网站是谁做的qq空间刷赞网站推广
  • 静态网站设计深圳推广不动产可视化查询
  • 青岛网站搭建seo积分系统
  • 网站建设最重要的因素快速提高关键词排名的软件
  • opencart做视频网站我是新手如何做电商
  • 建设电影网站数据库脚本b2b平台营销
  • 芜湖企业做网站百度竞价排名是什么方式
  • 杭州萧山做网站推广注册app拿佣金平台
  • 网站txt地图怎么做seo推广官网
  • 售后服务规范网站建设市场推广seo职位描述
  • 微信备份wordpressseo网站整站优化
  • 网站站外优化怎么做免费外链代发平台
  • 那些做面点的网站好上海seo优化外包公司
  • 设计网站下载百度应用搜索
  • 怎么在ppt上做网站网络推广途径
  • 中山做网站哪家便宜快速排名优化
  • 河北高端建设网站自媒体账号申请
  • 武汉做网站冰洁找到冰洁工作室企业网搭建
  • swoole怎么做直播网站域名查询工具
  • 丰都网站建设费用武汉seo网站排名优化
  • 网站设计方案怎么做正规代运营公司排名
  • 做h的动漫在线观看网站百度竞价排名算法
  • 网站建设手机版seo教学免费课程霸屏
  • 在哪里可以做公司网站营销背景包括哪些内容
  • 男女做羞羞羞的网站长春seo外包
  • 做php门户网站那个系统好搜图片找原图
  • 建设工程网站什么时候可以同步seo专员是什么职位
  • 室内设计可以去哪些公司seo网络优化推广
  • 做cad模板下载网站外链网站大全