与Rust的寿命检查示例混淆

时间:2019-04-23 15:01:12

标签: rust lifetime borrow-checker borrowing

我正在学习Rust指针,引用和生命周期概念,并且我遇到一个简单示例的问题。 好吧,我知道为什么此代码段无法编译:

struct Foo<'a> {
    x: &'a i32,
}

fn main() {
    let f;
    {
        let y = 5;
        f = Foo { x: &y };
    } // <-- y is dropped here

    println!("{}", f.x); // <-- We can't do that because f.x outlives y
}

但是问题在于以下代码可以成功编译,因此我认为持有值5的虚拟变量(例如_y)的寿命至少与f一样长。这是真的?如果不是,为什么会编译?

struct Foo<'a> {
    x: &'a i32,
}

fn main() {
    let f;
    {
        let y = &5; // I think this is equivalent to: let _y = 5; let y = &_y
        f = Foo { x: y };
    }

    println!("{}", f.x);
}

0 个答案:

没有答案