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

Rust中声明时借用引用与传参时借用引用是否存在差异?

两种写法的差异与术语说明

给定函数:

fn do_something(i: &i32) {
    println!("{i}");
}

你提到的两种写法运行时输出一致,但底层存储逻辑和生命周期存在本质区别:

1. 核心差异:存储位置与生命周期

  • 第一种写法:let a = &5; do_something(a);
    这里的5是整数字面量,Rust会将它存入程序的静态内存区(数据段),这块内存的内容在程序整个运行周期内都不会被释放。因此a是一个指向'static生命周期i32值的引用,你可以把a赋值给生命周期更长的变量,甚至作为函数返回值(只要函数签名标注&'static i32),借用检查器不会限制它的使用范围。

  • 第二种写法:let b = 5; do_something(&b);
    b是栈上的局部变量,5被存储在栈内存中,&b是对这个栈变量的借用引用,它的生命周期严格绑定到b的作用域——一旦b所在的代码块执行结束,b会被栈自动销毁,此时再使用这个引用就会触发借用检查器的报错。

2. 术语澄清

两种场景里的a和&b都属于引用类型,但可以按指向目标区分:

  • let a = &5;中的a是存储静态字面量引用的变量,这个引用指向静态内存中的值。
  • &b是指向栈上局部变量的临时引用,它是一个临时生成的引用值,传递给函数时完成自动借用。

你提到的"reference variable"指的是存储引用的变量(比如这里的a),"reference to a variable"指的是指向某个变量的引用(比如&b)——这两个概念不是一回事,但都属于Rust引用体系的范畴。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:45:41