1. 引用与借用的核心概念
1.1 什么是引用?
引用(&)是Rust中允许你访问值但不获取其所有权的指针。借用是获取引用的过程。
fn main() {
let s = String::from("hello");
let len = calculate_length(&s); // 创建引用(借用)
println!("'{}'的长度是{}", s, len); // s仍然有效
}
fn calculate_length(s: &String) -> usize { // 接收引用
s.len()
} // s离开作用域,但因为不拥有所有权,不会drop
1.2 引用规则
Rust的引用遵循严格的编译时规则:
- 任意时刻,只能满足以下之一:
- 一个可变引用
- 任意数量的不可变引用
- 引用必须总是有效的(不能悬垂)
2. 不可变引用 vs 可变引用
2.1 不可变引用
let x = 5;
let r1 = &x;
let r2 = &x; // 允许多个不可变引用
println!("{} {}", r1, r2);
2.2 可变引用
let mut x = 5;
let r = &mut x;
*r += 1; // 通过解引用操作修改值
// let r2 = &mut x; // 错误!同一时间只能有一个可变引用
2.3 数据竞争预防
Rust编译器通过借用规则在编译时防止数据竞争:
- 两个或多个指


被折叠的 条评论
为什么被折叠?



