五、引用与借用 (References & Borrowing)

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的引用遵循严格的编译时规则:

  1. 任意时刻,只能满足以下之一:
    • 一个可变引用
    • 任意数量的不可变引用
  2. 引用必须总是有效的(不能悬垂)

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编译器通过借用规则在编译时防止数据竞争:

  • 两个或多个指
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a736015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值