&*这种写法是什么意思?

2020-05-21 22:52:03 +08:00
 gramyang
let mut v = String::from("hello");
assert_eq!(Some("he"), v.get_mut(0..2).map(|v| &*v));

这里的 get_mut 是 str 的方法,其返回一个&mut str,这里的&*我猜测是将&mut str 给转换成了&str 。
请大佬指点。
3184 次点击
所在节点    Rust
2 条回复
zhizunzz
2020-05-22 06:50:46 +08:00
*是智能指针的解引用,&是引用好理解,你可以先不看&,搜下智能指针的资料
versee
2021-10-07 11:31:17 +08:00
一个类型之所以能当智能指针用是因为它实现了 Deref 这个 trait,以 String 为例,它 impl Deref 的时候写了 type Target=str,而当对这种类型进行解引用的时候得到的就是 Deref 中定义的这个 Target 的类型,所以对一个 String 类型解引用得到的是 str 类型,再加上&,得到的自然就是&str 类型。这也是&*写法的原因:某智能指针类型在解引用再加引用的过程中由于 Target 的存在,最终的得到的类型会发生变化。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/674197

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX