gpt4 book ai didi

rust - 生命周期参数和借用如何在函数签名中相互作用

转载 作者:行者123 更新时间:2023-12-03 11:25:22 25 4
gpt4 key购买 nike

假设我在 Rust 中有一个具有以下签名的函数:

fn f<'a>(x: &'a i32) -> &'a i32;

假设我执行以下操作:

let x = 0;
let y = f(&x);

在这种情况下,Rust 借用检查器认为 y 借用了 x。为什么?比“因为你在参数类型和返回类型中使用了相同的生命周期参数”更深层次的原因是什么。

最佳答案

函数签名

fn f<'a>(x: &'a i32) -> &'a i32;

表示 f 返回的值是对 x 参数所指内容的引用,因此它不能超过它。例如,这不起作用:

// Compile error
let y = {
let x = 0;
f(&x)

// x is dropped here
};

// Here y still "exists", but x doesn't (y outlives x)

针对您的具体问题:

Lets say I do the following then:

let x = 0;
let y = f(&x);

In that case, the Rust borrow checker considers y to borrow x. Why?

答案是因为 f 的函数签名告诉了它。举个例子,假设我们把签名改成这样:

fn f<'a, 'b>(x: &'a i32, z: &'b i32) -> &'a i32;

然后我们像这样调用f:

let x = 0;
let z = 1;
let y = f(&x, &z);

在上面的代码中,y 借用了 x,但没有借用 z。这是因为 f 的返回值的 'a 生命周期与 x 的生命周期相同。

关于rust - 生命周期参数和借用如何在函数签名中相互作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66305986/

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