Rust 对函数返回的临时变量的引用

Rust 对函数返回的临时变量的引用,rust,borrow-checker,Rust,Borrow Checker,我在试图回答时遇到了这个难题 如何/为什么编译: #[派生(调试,默认)] 结构Foo{ i:i32 } #[导出(调试)] 结构条{ fn default()->Self{ 酒吧{ foo:&foo{i:25} } } } fn main(){ let bar:bar=Default::Default(); println!(“{:?}”,条); } 我们创建一个Bar的实例,其中包含对Foo的引用,但是谁拥有Foo?它是在default()函数中匿名创建的,因此我希望出现一个错误,指出

我在试图回答时遇到了这个难题

如何/为什么编译:


#[派生(调试,默认)]
结构Foo{
i:i32
}
#[导出(调试)]
结构条{
fn default()->Self{
酒吧{
foo:&foo{i:25}
}
}
}
fn main(){
let bar:bar=Default::Default();
println!(“{:?}”,条);
}

我们创建一个
Bar
的实例,其中包含对
Foo
的引用,但是谁拥有
Foo
?它是在
default()
函数中匿名创建的,因此我希望出现一个错误,指出对它的引用超出了它的范围

如果我更改
default()
实现,则会得到预期的错误:

fn default()->Self{
设foo=foo{i:25};
酒吧{
foo:&foo
}
}
我阅读了参考资料中关于-的部分,没有发现任何情况下临时文件的范围会超出函数的范围。

这是由于:

当表达式可以在常量、借用和取消引用中写入,而不更改运行时行为时,会将值表达式提升到
静态
插槽。也就是说,可以在编译时对提升的表达式求值,结果值不包含或(这些属性在可能的情况下根据值确定,例如,
&None
始终具有类型
&'static Option
,因为它不包含任何不允许的内容)

error[E0515]: cannot return value referencing local variable `foo`
  --> src/main.rs:15:9
   |
15 | /         Bar {
16 | |             foo: &foo
   | |                  ---- `foo` is borrowed here
17 | |         }
   | |_________^ returns a value referencing data owned by the current function