MST

星途 面试题库

面试题:Rust函数中生命周期标注规则

在Rust函数中,假设有一个函数接收两个字符串切片并返回其中较长的那个,写出该函数的签名并解释其中生命周期标注的规则。
36.0万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
    if s1.len() > s2.len() {
        s1
    } else {
        s2
    }
}

生命周期标注规则解释

  1. <'a>:这是生命周期参数声明。在Rust中,当函数涉及多个引用参数且它们之间存在生命周期关系时,需要显式声明生命周期参数。这里的'a代表一个通用的生命周期,它并不实际指定具体的生命周期时长,只是作为一个占位符,用于后续标注引用的生命周期。
  2. s1: &'a strs2: &'a str:这表示参数s1s2都是字符串切片,并且它们的生命周期都是'a。这意味着在函数调用期间,s1s2所引用的数据至少要存活到函数调用结束。
  3. -> &'a str:函数返回值是一个字符串切片,其生命周期同样是'a。这确保了返回的切片所引用的数据在函数调用结束后仍然有效,并且与传入的参数s1s2的生命周期一致。如果不这样标注,编译器无法确定返回值所引用的数据的生命周期,可能会导致悬空指针等问题。通过统一生命周期标注为'a,编译器可以保证在函数调用结束时,返回值仍然指向有效的数据。