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

建设网站需要虚拟空间北京网站优化快速排名

建设网站需要虚拟空间,北京网站优化快速排名,wordpress 调用特定分类文章,摄影网站官网大全目录 Rust 所有权原则变量所有权变量作用范围深拷贝 Rust 的引用示例可变引用不可变引用可变引用和不可变引用不能同时存在悬垂引用 Rust 所有权原则 Rust 中每一个值都被一个变量所拥有,该变量被称为值的所有者一个值同时只能被一个变量所拥有,或者说一…

目录

    • Rust 所有权原则
      • 变量所有权
      • 变量作用范围
      • 深拷贝
    • Rust 的引用
      • 示例
      • 可变引用
      • 不可变引用
      • 可变引用和不可变引用不能同时存在
      • 悬垂引用

Rust 所有权原则

  1. Rust 中每一个值都被一个变量所拥有,该变量被称为值的所有者
  2. 一个值同时只能被一个变量所拥有,或者说一个值只能拥有一个所有者
  3. 当所有者(变量)离开作用域范围时,这个值将被丢弃

变量所有权

在 Rust 中,默认情况下赋值操作会转移所有权,而不是创建副本。例如

fn main() {let s1 = String::from("hello");let s2 = s1; // s1 的所有权转移给 s2// println!("{}", s1); // ❌ 编译错误,s1 不再有效
}
  • s1 原本是 "hello" 的所有者
  • s1 赋值给 s2 后,所有权转移,s1 失效,不能再被使用

对于基本数据类型(如整数、浮点数、布尔值、字符等),Rust 采用 Copy 一个值,不会发生所有权转移

fn main() {let x = 5;let y = x; // x 仍然可用,因为 i32 是 Copy 类型println!("x = {}, y = {}", x, y); // ✅ 允许
}

变量作用范围

fn main() {{let s = "ss";}println!("s 的数值是 {}", s);
}

cargo check报错

error[E0425]: cannot find value `s` in this scope--> src\main.rs:5:27|
5 |     println!("s 的数值是 {}", s);|                               ^|
help: the binding `s` is available in a different scope in the same function--> src\main.rs:3:13|
3 |         let s = "ss";|             ^For more information about this error, try `rustc --explain E0425`.
  • 不能在这个作用域中发现 s

简而言之,s 从创建开始就有效,然后有效期持续到它离开作用域为止

深拷贝

首先,Rust 永远也不会自动创建数据的 深拷贝 因此,任何自动的复制都不是深拷贝,可以被认为对运行时性能影响较小

  • 手动深拷贝
let s1 = String::from("hello");
let s2 = s1.clone();println!("s1 = {}, s2 = {}", s1, s2);

Rust 的引用

Rust 的 引用(Reference) 是一种不拥有数据所有权的方式,它允许在不复制数据的情况下访问数据,同时确保 内存安全 和 数据一致性

引用的本质是指向某个值的地址,但它不会夺取该值的所有权,而只是借用(borrow)它

示例

fn main() {let s1 = String::from("hello");let len = calculate_length(&s1); // 传递 s1 的引用println!("The length of '{}' is {}", s1, len); // ✅ s1 仍然可用
}fn calculate_length(s: &String) -> usize {s.len() // 只读访问 s
}
  • &s1 代表对 s1 的引用,但 s1 仍然是原来的所有者
  • calculate_length 只是借用 s,不会修改它,也不会夺走所有权
  • s1main 里仍然有效

可变引用

如果想修改引用的数据,需要使用可变引用(&mut T

fn main() {let mut s = String::from("hello");change(&mut s); // 可变借用 sprintln!("{}", s); // ✅ "hello, world!"
}fn change(s: &mut String) {s.push_str(", world!"); // 修改 s
}

可变引用的规则

  1. 在同一时间,只能有一个可变引用(&mut T)
  2. 不能同时拥有可变引用和不可变引用(&T)

不可变引用

fn main() {let s = String::from("hello");let r1 = &s; // 允许let r2 = &s; // 允许println!("{} and {}", r1, r2); // ✅ 允许多个不可变引用
}

可变引用和不可变引用不能同时存在

Rust 防止数据竞争,所以:

  • 如果存在可变引用(&mut T),就不能有不可变引用(&T)
  • 如果存在不可变引用(&T),就不能创建可变引用(&mut T)
fn main() {let mut s = String::from("hello");let r1 = &s;let r2 = &s;let r3 = &mut s; // ❌ 编译错误:r1, r2 仍然有效,不能创建可变引用println!("{}, {}", r1, r2);
}

悬垂引用

fn dangle() -> &String { // ❌ 编译错误let s = String::from("hello");&s // ❌ 返回局部变量的引用
} // s 被释放,引用失效
  • 这里引用值会释放掉,从而造成错误
  • Rust 检查器会报错

其中一个很好的解决方法是直接返回 String

fn no_dangle() -> String {let s = String::from("hello");s // ✅ 所有权转移,数据不会被释放
}

文章转载自:

http://z7NzSB8K.jwtjf.cn
http://HdVG0FrS.jwtjf.cn
http://gcHD4QpO.jwtjf.cn
http://I1PZjLAt.jwtjf.cn
http://cg0rDA80.jwtjf.cn
http://JUVssyVU.jwtjf.cn
http://SnB2MzzH.jwtjf.cn
http://CxddI2bo.jwtjf.cn
http://qronLBwU.jwtjf.cn
http://5t7qj6ya.jwtjf.cn
http://DzvyYz2A.jwtjf.cn
http://szueCqLt.jwtjf.cn
http://T6QXH8AF.jwtjf.cn
http://4Z7uYa0W.jwtjf.cn
http://YmkG1DJt.jwtjf.cn
http://zX34I973.jwtjf.cn
http://PvCWTRM0.jwtjf.cn
http://S6VBJvvY.jwtjf.cn
http://600OsYpi.jwtjf.cn
http://g1wGdqnd.jwtjf.cn
http://i4x63HK4.jwtjf.cn
http://kqbcSkgQ.jwtjf.cn
http://feWKZKbZ.jwtjf.cn
http://UPAkwF27.jwtjf.cn
http://e2kleIDa.jwtjf.cn
http://AFvbDrKa.jwtjf.cn
http://pmM76uoL.jwtjf.cn
http://IFgxTvJw.jwtjf.cn
http://fIuImbsP.jwtjf.cn
http://LOtUYsS3.jwtjf.cn
http://www.dtcms.com/wzjs/693849.html

相关文章:

  • 重庆公司注册官网入口seo公司培训
  • 网站建设柒首先金手指2电子商务网站功能设计与分析
  • 随州制作网站小程序网站开发者利
  • 哪里能注册免费的网站网站建设都是需要什么
  • 大润发超市网上商城怎么样免费给网站做优化
  • 网站做icp备案需要多久番禺网站建设服务
  • 合肥高端网站开发wordpress怎么新建模块
  • 网站流量推广注册一个5000万空壳公司要多少钱
  • 简单网站设计价格如何利用网站做淘宝联盟
  • 太原做手机网站设计微网站开发素材
  • 网站界面设计分析网站做外链的方式
  • 网站代运营服务公司网站建设与维护培训
  • 网站设计简单讲解一个网站的开发周期
  • 企业建立网站需要什么条件wordpress divi
  • 网站推广计划至少应包括家庭网络组网方案
  • 华为云速建站可以做英文网站怎样创建网站挣钱
  • 中国开头的网站怎么做wordpress萌主题下载
  • seo网站建设规划只做水果的网站
  • 设计 企业网站网站建设app是什么
  • 代发网站建设网站建设管理制度
  • 男女做爰高清免费视频网站wordpress 4.9.8主题
  • 增城营销网站建设后台网站模板html
  • 制作企业网站的代码如何创造一款游戏
  • 网站页面统计代码是什么意思西安建筑科技大学
  • 做网站难吗 挣钱吗军队信息化建设网站
  • 网站设计的布局网站验证码 出不来
  • 天河建设网站报价开发一个网站多少钱?
  • 曲阳网站建设推广wordpress高级教程下载
  • 站长素材免费下载东莞洪梅网站建设
  • 山东网站域名备案时间科技信息期刊