学习生 rust :错误:“x”的生存时间不够长

von4xj4u  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(89)

this Rust book中:

fn main() {
    let mut x = 5;
    let y = &mut x;

    *y += 1;

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

在这种情况下,编译器可以很容易地知道y已经完成了它的工作,因为在println之后没有更多的代码,所以print x是安全的,为什么它还抱怨呢?
在以下代码片段中:

let y: &i32;
let x = 5;
y = &x;

println!("{}", y);

编译器应该知道结果println是安全的并允许它;所以在这行代码之后,我可以重用y来执行y = &z;

jvidinwx

jvidinwx1#

你正在阅读的是一本很老的Rust书,在 *non-lexical lifetime * 被引入之前,那时编译器确实会拒绝这样的代码--它不看引用实际上何时不再使用,只看变量y的作用域在哪里结束。现在,在当前的Rust中,相同的代码被接受。
您应该使用the current, official version of the book

相关问题