不可变引用和可变引用的生命周期有以下区别:
代码示例:
fn main() {
let x = 5; // 创建一个不可变绑定
let y = &x; // 创建一个不可变引用,并将其绑定到x
println!("x: {}, y: {}", x, y);
} // y的生命周期在这里结束,x的生命周期也在这里结束
代码示例:
fn main() {
let mut x = 5; // 创建一个可变绑定
let y = &mut x; // 创建一个可变引用,并将其绑定到x
*y += 1; // 修改y引用的值
println!("x: {}, y: {}", x, y);
} // y的生命周期在这里结束,x的生命周期也在这里结束
需要注意的是,Rust编译器在编译时会进行借用检查,以确保引用的生命周期正确,并避免数据竞争和并发问题。