将引用的引用传递给函数参数(书 v1)

Passing reference of reference to function argument (book v1)

简而言之,将另一个引用 B 的引用 A 传递给函数参数会导致自动取消引用吗?

这是故事...

阅读stack & heap - complex example时,对下面的解释感到困惑,请看img01 -> img02.

由于变量e是对变量d的引用,所以e的值在-> 9 (i read it as: go to memory address of d)中表示,这样就可以了。

但是为什么baz的参数f得到的是“d引用的数据地址”的值,而不是e的值呢?我以为 f 的值也应该是 -> 9

如果 f 是 img02 所说的,那么是否意味着“取消引用”自动发生在这里?由于 e 包含对 d 的引用,d 包含对某个堆地址的引用,并且将 e 传递给 f 会导致 f 有堆地址的引用?

img01

img02

是的,取消引用是自动完成的。这叫做Deref coercion.

这是一种允许将一个引用隐式转换为另一个引用的机制。一些值得注意的用途:

  • &&T -> &T
  • &&&&&&&&T -> &T
  • &Box<T> -> &T
  • &Vec<T> -> &[T]

查看 Rust 书中的更多解释:Treating Smart Pointers Like Regular References with the Deref Trait or in the Rust reference: Type Coercions