我有一个相当简单的程序:
fn f<'a>() -> &'a i32 {
&1
}
fn main() {
println!("{}", f());
}
Run Code Online (Sandbox Code Playgroud)
它没有编译(一些输出省略):
$ rustc test.rs
test.rs:2:6: 2:7 error: borrowed value does not live long enough
test.rs:2 &1
Run Code Online (Sandbox Code Playgroud)
我明白为什么失败了.
编辑:我改变了标题,因为它建议返回盒装类型将帮助不是(见答案).
由于 Rust 使用 RAII 风格的资源管理,一旦程序离开某个范围,该范围内所有未移动的值都将被销毁。该值必须存在于某处才能使引用有效。因此,要么直接返回该值(如果您担心执行此操作时会有额外的副本,那么不必担心,因为该副本将被优化掉),要么将其装箱并返回该框。除非您按如下方式返回静态分配的字符串&str,否则您根本无法返回“新”(对于调用者)引用:
fn f<'a>() -> &'a str {
"yo"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1301 次 |
| 最近记录: |