有以下2段代码:
代码片段1,这段代码编译运行无问题。
#[derive(Debug)]
struct MyType;
let mut x0 = MyType;
{
let xx = &mut x0;
let x5: &MyType = (xx).borrow();
print!("x5:{:p}, ", x5);
}
代码片段2,这段代码编译不通过,提示信息如下:
#[derive(Debug)]
struct MyType;
let mut x0 = MyType;
{
let x5: &MyType = (&mut x0).borrow();//这一行编译出错
print!("x5:{:p}, ", x5);
}
提示错误信息,意思是这行代码结束,生命周期就结束了。提示信息如下:
temporary value dropped while borrowed
consider using a `let` binding to create a longer lived valuerustcClick for full compiler diagnostic
main.rs(187, 45): temporary value is freed at the end of this statement
main.rs(188, 29): borrow later used here
我有点看不太懂,为啥直接(&mut x0)就生命周期结束了。 大佬们帮忙指点一二。
1
共 3 条评论, 1 页
评论区
写评论这就是 Rust 的规则呀,临时产生的值在语句结束后就被丢弃了。
你的第二段代码等价于:
不知道怎么解释,不过第二种在调用完生命周期就结束了 https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=e27ebf2a55e6bb68153bbb4456045da9