喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
10.7.1. 深入理解生命周期
1.指定生命周期参数的方式依赖于函数所做的事情
以上一篇文章的代码为例子:
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
这里的函数签名之所以这么写是因为不确定返回值到底是x
还是y
。如果我修改代码,比如把返回值固定为x
那么就没必要给y
写一个显式生命周期了:
fn longest<'a>(x: &'a str, y: &str) -> &'a str {
x
}
所以这个代码的函数签名就没有给y
限制生命周期。
2.当函数返回引用时,返回类型的生命周期参数需要与其中一个生命周期匹配
如果返回的引用没有指向任何参数,返回的内容就会变成悬空引用,因为在函数内创建的值在函数结束的时候就离开了作用域,返回的引用指向的就是被释放的内存。
看个例子:
fn longest<'a>(x: &'a str, y: &str) ->