借用与引用
不可变/可变引用规则与常见编译错误
本节你将能
正确使用 &T/&mut T,并说明 借用 的互斥规则。
直觉模型
不可变借用像「多人同时只读说明书」;可变借用像「同一时间只允许一人改稿」——读写不能并行,多个写也不能并行。
核心要点
- 可同时存在多个
&T,或唯一一个&mut T,二者不可并存 - 函数用引用接参可避免 move:
fn len(s: &String) -> usize - 悬垂引用在编译期被拒绝
fn add_bang(s: &mut String) { s.push('!'); }
fn main() {
let mut name = String::from("Rust");
add_bang(&mut name);
println!("{name}");
}
常见误区
在持有 &mut 时还想再借 & 打印中间状态——先缩短可变借用作用域再读。
动手
写一个同时存在 & 与 &mut 的错误示例,再改到能通过编译。
互动
测验:判断哪些借用组合合法。
本节小结
下一节用生命周期标注解释「引用能活多久」。