我正在查看这个 rust 文档 https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-02-references-and-borrowing.html
当我借用 &mut 两次时,我不会看到任何错误(请参阅下面的代码),谁能告诉我为什么?
let mut s = String::from("hello");
let r1 = &mut s;
let r2 = &mut s;
我正在查看这个 rust 文档 https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-02-references-and-borrowing.html
当我借用 &mut 两次时,我不会看到任何错误(请参阅下面的代码),谁能告诉我为什么?
let mut s = String::from("hello");
let r1 = &mut s;
let r2 = &mut s;
这是由于非词汇生命周期。编译器认识到,由于第一个引用在创建第二个引用之后从未使用过(或者在您的示例中根本没有使用),因此可以简单地删除它,从而允许创建第二个引用。
如果我们尝试用下面的例子来延长第一个引用的生命周期,我们会得到一个关于有多个可变引用的错误,正如预期的那样:
let mut s = String::from("hello");
let r1 = &mut s;
let r2 = &mut s; // error[E0499]: cannot borrow `s` as mutable more than once at a time
drop(r1);