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

Rust中返回&&i32与&i32不匹配为何能编译通过?

Rust中返回&x为何能编译通过?

你观察到的现象是Rust的**自动解引用(Deref Coercion)**机制在起作用。

先看你的第二个函数代码:

fn f1(x: &i32) -> &i32{
    &x
}

这里x的类型是&i32,&x确实会生成一个&&i32类型的嵌套引用,但Rust编译器会自动对这个嵌套引用进行隐式解引用,将其转换为&i32类型,匹配函数的返回值要求。

具体来说,编译器会自动帮你插入解引用操作,相当于把代码转换成了:

fn f1(x: &i32) -> &i32{
    *&x
}

而*&x等价于x——因为对一个引用取地址(&)再解引用(*),结果就是原引用本身,最终返回的类型还是&i32,完全符合函数的返回类型声明,所以代码能正常编译。

这种隐式转换是Rust为了简化嵌套引用处理、提升代码可读性设计的,当返回值类型和目标类型可以通过Deref trait转换时,编译器就会自动完成这个过程,无需你手动编写多层解引用符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:15:28