下面输出的部分,两条输出语句只能同时存在一条是为什么?
fn main() {
let mut v = vec![String::from("one"),String::from("two"),String::from("third")];
let mut third = &mut v[2];
*third = String::from("forth");
println!("The third element is {}", v[2]);
//println!("The third element is {}", third);
}
1
共 1 条评论, 1 页
评论区
写评论在NLL情况下,没有第二个输出,就会自动在第一个输出前结束third的生命周期,因为之后的代码都不会使用到third。
然而,如果有第二个输出,因为third是一个可变借用,而v[2]又包含了另一个可变/不可变借用,违反了不能同时存在两个可变借用/不能在可变借用周期中混用不可变借用的原则,因此不能通过编译。原因是如果同时用两个可变借用,在并行情况下会造成竞争的问题。