You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust新手提问:为何可返回局部临时引用的代码能编译通过?

问题解答

这段代码能正常编译的核心原因是Rust的**常量提升(Constant Promotion)**机制:

  • 你代码中&1、&2取的是整型字面量的引用,Rust会自动把所有满足'static约束的常量字面量,提升到全局静态存储区存放,而不是存储在当前函数的栈帧里,不会随函数执行结束被回收。
  • 因此你声明的a、b两个引用,实际类型是&'static i32,'static生命周期的有效范围覆盖整个程序运行周期,自然可以安全地被返回出当前函数作用域。
  • 函数返回值声明的生命周期泛型'a,在调用时会自动匹配实际返回的引用生命周期,'static可以兼容任意生命周期要求,所以生命周期校验可以通过。

你可以尝试修改代码验证这个逻辑,下面的写法就会触发常规的「返回局部变量引用」编译错误:

fn test_Borrowing3<'a>() -> Vec<&'a i32>
{
        let x = 1;
        let y = 2;
        let a: &i32 = &x;
        let b = &y;
        let aa = vec![a, b];
        return aa
}

这时候x、y是存放在栈上的局部变量,引用的生命周期只能限制在当前函数内,无法返回出去。


内容的提问来源于stack exchange,提问作者Ken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:09:02