这个Rust程序不能编译,因为
在这个第二个 Rust 程序中,通过一个函数获取了对
事实上,
为什么这两者不同呢?
b
在引用r
之前已被释放,这是有道理的:fn main() {
let a = "a";
let v;
{
let b = "b";
v = &b;
}
println!("{}", v);
}
在这个第二个 Rust 程序中,通过一个函数获取了对
b
的引用后,突然间就没有问题了:fn getRef(b: &str) -> &str {
b
}
fn main() {
let a = "a";
let v;
{
let b = "b";
v = getRef(&b);
}
println!("{}", v);
}
事实上,
v
仍然是指向 b
的引用,但是 b
超出了 println!()
的作用域。为什么这两者不同呢?