< 返回版块

laiyiwanrexiang 发表于 2019-12-13 22:00

下面输出的部分,两条输出语句只能同时存在一条是为什么?

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);

}

评论区

写评论
xjkdev 2019-12-13 23:48

在NLL情况下,没有第二个输出,就会自动在第一个输出前结束third的生命周期,因为之后的代码都不会使用到third。

然而,如果有第二个输出,因为third是一个可变借用,而v[2]又包含了另一个可变/不可变借用,违反了不能同时存在两个可变借用/不能在可变借用周期中混用不可变借用的原则,因此不能通过编译。原因是如果同时用两个可变借用,在并行情况下会造成竞争的问题。

1 共 1 条评论, 1 页