我正在检查此防锈文档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;
这是由于non-lexical lifetimes。编译器认识到,由于从不使用第一个引用,因此可以简单地将其删除,从而允许创建第二个引用。
如果强制我们延长第一个引用的生存期,我们可以看到编译器仍在执行常规检查,如下所示:
let mut s = String::from("hello");
let r1 = &mut s;
let r2 = &mut s;
drop(r1);