将引用的引用传递给函数参数(书 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。
简而言之,将另一个引用 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。