小编zar*_*i10的帖子

关于理解生命周期的问题

我一直很难理解生命周期,如果您能帮助理解这里的资源和其他问题/答案中通常缺少的一些微妙之处,我将不胜感激。甚至本书的整个部分都具有误导性,因为其用作生命周期背后基本原理的主要示例或多或少是错误的(即编译器可以很容易地推断出上述函数的生命周期)。


以这个函数(有点类似于本书)为例:

fn foo<'a>(x: &'a str, y: &'a str) -> &'a str {
    x
}
Run Code Online (Sandbox Code Playgroud)

我的理解是明确的寿命断言返回参考不应该比最短的寿命的寿命更长xy。或者换句话说,无论是xy应该活得比返回参考。(虽然我完全不确定编译器到底做了什么,它是否检查参数的生命周期,然后将最小值与返回引用的生命周期进行比较?)

但是如果我们没有返回值,那么生命周期意味着什么?它是否意味着特殊含义(例如,与使用两个不同的生命周期相比?)

fn foo<'a>(x: &'a str, y: &'a str) {
    
}
Run Code Online (Sandbox Code Playgroud)

然后我们有如下结构:

struct Foo<'a, 'b> {
    x: &'a i32,
    y: &'b i32,
}
Run Code Online (Sandbox Code Playgroud)

struct Foo<'a> {
    x: &'a i32,
    y: &'a i32,
}
Run Code Online (Sandbox Code Playgroud)

似乎对字段使用相同的生命周期会增加一些约束,但是导致某些示例不起作用的约束究竟是什么?


这可能需要一个自己的问题,但有很多提到生命周期和范围不同但没有详细说明,是否有任何资源对此进行更深入的研究,尤其是考虑到非词法生命周期?

lifetime rust

3
推荐指数
1
解决办法
92
查看次数

标签 统计

lifetime ×1

rust ×1