gpt4 book ai didi

syntax - 从函数的堆栈返回对 Path 的引用是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 07:48:13 25 4
gpt4 key购买 nike

以下片段来自 path.rs 的 rust 源代码

impl AsRef<Path> for String {
fn as_ref(&self) -> &Path {
Path::new(self)
}
}

它似乎从堆栈帧中返回一个新创建的Path 对象的引用。它如何绕过 Rust 的借用检查规则?堆栈对象应该只有当前帧的生命周期,并且返回临时对象的引用应该会产生错误。

最佳答案

返回的引用并不指向在 as_ref() 中新创建的某个对象,而是指向作为参数传入的字符串的数据。

让我们明确相关函数中的生命周期。原型(prototype)

fn as_ref(&self) -> &Path

可以脱糖

fn as_ref(&'a self) -> &'a Path

self的类型是&'a String,是对生命周期为'a的字符串的引用。

在函数体内,Path::new() 被调用。根据文档,它是这样定义的:

pub fn new<S: AsRef<OsStr> + ?Sized>(s: &S) -> &Path

添加省略的生命周期给出

pub fn new<S: AsRef<OsStr> + ?Sized>(s: &'a S) -> &'a Path

因此新创建的Path 引用将与我们传入的引用具有相同的生命周期,这正是返回值所需的生命周期。

关于syntax - 从函数的堆栈返回对 Path 的引用是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53785538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com