我正在学习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);
}