MST

星途 面试题库

面试题:Rust中生命周期标注在函数参数中的最佳实践应用

假设有一个函数,它接受两个字符串切片作为参数,并返回其中较长的那个。请写出这个函数并正确标注生命周期。同时解释为什么这样标注生命周期是一种最佳实践。
37.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
fn longer_slice<'a>(slice1: &'a str, slice2: &'a str) -> &'a str {
    if slice1.len() >= slice2.len() {
        slice1
    } else {
        slice2
    }
}

生命周期标注解释

  1. 标注方式:这里使用 <'a> 来标注生命周期参数,并且将两个输入参数 slice1slice2 以及返回值都标注为 &'a str。这意味着输入的两个字符串切片和返回的字符串切片的生命周期都被标注为 'a
  2. 最佳实践原因
    • 生命周期一致性:这样标注确保了返回值的生命周期至少和输入参数中生命周期较短的那个一样长。因为返回值要么是 slice1 要么是 slice2,如果返回值的生命周期标注和输入参数不一致,可能会导致悬空引用。例如,如果返回值的生命周期比输入参数中较短的那个还长,那么当较短生命周期的参数离开作用域时,返回值所引用的数据可能已经被释放,从而产生未定义行为。
    • 代码简洁性与可读性:这种标注方式清晰明了,符合 Rust 中关于生命周期的基本规则和逻辑,易于理解和维护。如果不标注或错误标注,编译器会报错,使得代码难以通过编译。同时,这种标注也让其他开发者能够快速理解函数中引用之间的生命周期关系。