如果我有两个函数
// implicit
fn foo(x: &i32) {
}
// explicit
fn bar<'a>(x: &'a i32) {
}
什么情况下 foo
会返回错误并且 bar
是正确的函数头?我不确定为什么要显式声明生命周期:
'a 表示“生命周期 a”。从技术上讲,每个引用都有与之关联的某个生命周期,但编译器允许在常见情况下省略它们。
我理解生命周期的含义,但是明确指定生命周期 'a
' 对我有什么帮助呢?参考资料是 Rust book
如果我有两个函数
// implicit
fn foo(x: &i32) {
}
// explicit
fn bar<'a>(x: &'a i32) {
}
什么情况下 foo
会返回错误并且 bar
是正确的函数头?我不确定为什么要显式声明生命周期:
'a 表示“生命周期 a”。从技术上讲,每个引用都有与之关联的某个生命周期,但编译器允许在常见情况下省略它们。
我理解生命周期的含义,但是明确指定生命周期 'a
' 对我有什么帮助呢?参考资料是 Rust book
struct Blah<'a> {
hoy: &'a u8
}
fn want_a_hoy(blah: &Blah) -> &u8 {
blah.hoy
}
<anon>:7:35: 7:38 error: missing lifetime specifier [E0106]
<anon>:7 fn want_a_hoy(blah: &Blah) -> &u8 {
^~~
<anon>:7:35: 7:38 help: see the detailed explanation for E0106
<anon>:7:35: 7:38 help: this function's return type contains a borrowed value, but
the signature does not say which one of `blah`'s 2 elided
lifetimes it is borrowed from
fn want_a_hoy<'a, 'b>(blah: &'b Blah<'a>) -> &'a u8 {
blah.hoy
}
fn pick_one(a: &T, b: &T) -> &T
(即使它始终无条件地返回其中一个)。 - user395760