// 函数签名
fn function_with_lifetimes<'a, 'b>(ref1: &'a i32, ref2: &'b i32) -> () {
// 函数体
}
生命周期标注说明
'a
和 'b
:这两个是生命周期参数。它们代表了 ref1
和 ref2
引用的生命周期。
- 为何这样标注:
- Rust 编译器需要明确知道引用的生命周期,以防止悬空引用和数据竞争。这里分别为两个引用标注不同的生命周期参数
'a
和 'b
,表示它们的生命周期可以相互独立。如果这两个引用指向的数据确实存在关联,并且生命周期相同,调用者在传入引用时,应该保证传入的引用具有相同的生命周期范围。例如:
fn main() {
let num1 = 10;
let num2 = 20;
function_with_lifetimes(&num1, &num2);
}
在这个例子中,num1
和 num2
的生命周期从它们被声明开始,到 main
函数结束。当将 &num1
和 &num2
传入 function_with_lifetimes
时,由于它们在 main
函数内的生命周期范围一致,满足函数对引用生命周期的要求。如果两个引用的生命周期不同,编译器会报错,因为这可能导致数据竞争或悬空引用等问题。