< 返回版块

w 发表于 2021-02-04 18:07

Tags:生命周期,lifetime

fn max_num<'a>(x: &'a i32, y: &'a i32) -> &'a i32 {
    if x > y {
        &x
    } else {
        &y
    }
}
fn main() {
    let x = 1;                // -------------+-- x start
    let max;                  // -------------+-- max start
    {                         //              |
        let y = 8;              // -------------+-- y start
        max = max_num(&x, &y);  //              |
    }                         // -------------+-- y over
    println!("max: {}", max); //              |
}

这段代码会正常报错 提示borrowed value does not live long enough

fn main() {

    let g;
    let s1 = "ASd";

    {
        let s2 = "asad";
        g = longer(s1,s2);
    }

    println!("{} is longer", g);
}


fn longer<'a>(s1:&'a str, s2:&'a str) -> &'a str {
    if s2.len() > s1.len() {
        s2
    } else {
        s1
    }
}

但是上面这段代码却可以通过编译正确执行。 麻烦问下为什么可以通过编译。

评论区

写评论
作者 w 2021-02-05 09:23

感谢感谢

--
👇
gwy15: s1 和 s2 都是 &'static str,你改成 String 一样报错

gwy15 2021-02-04 20:22

s1 和 s2 都是 &'static str,你改成 String 一样报错

1 共 2 条评论, 1 页