我是新的生 rust ,我正在努力理解/学习借用检查和终身注解。
当函数接受单个引用作为参数时,为什么可以推断生存期?
fn main() {
let num = 1;
let num_ref = test(&num);
println!("{}", num_ref);
}
fn test(num: &i32) -> &i32 {
num
}
字符串
但当函数有两个不同引用类型的参数时就不是了。
fn main() {
let num = 1;
let s = "test";
let num_ref = test(&num, s);
println!("{}", num_ref);
}
fn test(num: &i32, s: &str) -> &i32 {
num
}
型
借用检查器不应该能够推断返回的生命周期应该与&i32引用相同吗?因为它是该函数中唯一可以返回的参数。或许我错过了什么?
2条答案
按热度按时间n53p2ov01#
或许我错过了什么?
是的。Rust不做 * 生命周期推断 *,相反,它有一个简单得多的lifetime elision过程,只有几个简单的情况,因此具有非常低的成本/收益比,几乎没有陷阱。然而,正如你所注意到的,它确实很早就出现了问题。
ki0zmccv2#
事实上,也许我知道为什么了。我想可能会有这样的情况
字符串
第二种类型可以是包含i32的对象。因此,在这种情况下,可能存在多个可能的&i32参考返回