Rust函数传参时传递引用的引用是否会发生自动解引用?
问题解答:Rust传参时的自动解引用问题
结论
你描述的场景确实触发了Rust的*自动解引用强制转换(Deref coercion)*机制。
原理说明
- 首先明确变量类型关系:已知
d是指向堆上数据9的引用,类型为&i32;e是指向d的引用,类型为&&i32。 - 若
baz函数的参数f声明的类型为&i32,当你把类型为&&i32的e作为参数传入时,Rust编译器会自动对e做一次解引用操作,将&&i32转换为参数要求的&i32类型,因此f最终拿到的是d指向的堆数据地址,而非e本身存储的d的栈地址。 - 这种自动转换是编译期完成的,没有额外运行时开销,效果等价于你手动传
*e作为参数。
参考图示


内容的提问来源于stack exchange,提问作者Ranian Liu
相关产品推荐
相关产品推荐

