MST

星途 面试题库

面试题:Rust函数返回值引用生命周期推断基础

请编写一个Rust函数,该函数接收两个字符串切片作为参数,并返回其中较长的那个字符串切片。要求利用Rust的生命周期推断规则,确保代码能正确编译且没有内存安全问题。请解释函数中涉及的生命周期推断原理。
23.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

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

生命周期推断原理

  1. 参数生命周期:在函数longer_string中,参数s1s2都是字符串切片&str类型。这意味着它们都有一个隐含的生命周期,但是在函数定义时并没有显式标注生命周期参数。
  2. 返回值生命周期:函数返回类型&str同样没有显式标注生命周期参数。
  3. Rust的生命周期推断规则
    • 第一条规则:每个引用参数都有它自己的生命周期参数。对于longer_string函数,s1s2分别有自己的生命周期,假设为'a'b
    • 第二条规则:如果只有一个输入生命周期参数,那么它被赋给所有输出生命周期参数。在这个函数中,虽然有两个输入参数s1s2,但由于返回值要么是s1要么是s2,所以Rust编译器能够推断出返回值的生命周期与输入参数的生命周期相关。
    • 第三条规则:如果有多个输入生命周期参数,且其中一个是&self&mut self(适用于方法),那么self的生命周期被赋给所有输出生命周期参数。此规则在本函数中不适用,因为它不是方法。
    • 综合以上规则,Rust编译器可以推断出返回值的生命周期与输入参数的生命周期中的某一个相同(因为返回值就是其中一个输入参数),所以代码能够正确编译且不存在内存安全问题。