我有 2 个示例代码。
第一个示例代码
fn main() {
let mut s = String::from("hello");
let r1 = &mut s;
let r2 = & s;
println!("{}", r2);
}
第二个示例代码
fn main() {
let mut s = String::from("hello");
let r1 = &mut s;
let r2 = & s;
println!("{}", r1);
}
我困惑的是为什么 1stExampleCode
工作正常,但是2ndExampleCode
创建编译错误如下
cannot borrow 's' as immutable because it is also borrowed as mutable
据我所知,在两个示例代码中我都借用 r1
进行了可变借用 s
而r2
进行了不可变的借用 s
。那么为什么1stExampleCode
自 s
起不再有错误借用为 mutable
和immutable
同时。或者因为r1
未使用,因此不会产生任何错误。
最佳答案
在第一个示例中,编译器足够聪明,知道 r1
在初始化后不再使用,因为它不再被调用。
这也意味着借用的s
在r1
初始化行之后被释放,并且可以被其他人借用。所以r2
可以借用它。
在第二个示例中,r1
借用具有可变引用的 s
值。可变引用只能由一个变量借用。
但是 r2
借用了 s
变量,而 r1
仍然在 println!
行中使用它。
欲了解更多信息,您可以阅读此https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html
关于rust - 关于 Rust 中的借用的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71814554/