MST

星途 面试题库

面试题:Rust中借用机制下生命周期标注基础

请解释在Rust中,当我们有一个函数接收两个引用参数并返回一个引用时,如何正确标注它们的生命周期。请给出一个简单的示例代码说明。
12.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

在Rust中,当函数接收两个引用参数并返回一个引用时,需要使用生命周期标注,以确保返回的引用在其使用期间所依赖的引用仍然有效。

生命周期标注语法使用 'a 这种形式,其中 a 是一个任意的名称,通常使用单个字母。

以下是一个简单的示例代码:

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() {
    let string1 = String::from("abcd");
    let string2 = "xyz";

    let result = longest(&string1, &string2);
    println!("The longest string is: {}", result);
}

在上述代码中:

  1. fn longest<'a>(x: &'a str, y: &'a str) -> &'a str 声明了函数 longest,它有一个生命周期参数 'a
  2. 参数 xy 都标注为 &'a str,表示它们的生命周期至少为 'a
  3. 返回值 &'a str 也标注为 'a,这意味着返回的引用的生命周期与参数 xy 中生命周期较短的那个一致。这样能确保返回的引用在函数调用者使用它时,其所依赖的参数引用仍然有效。