前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Rust笔记]`Deref coercion`(自动解引用类型转换)精制总结

[Rust笔记]`Deref coercion`(自动解引用类型转换)精制总结

作者头像
MikeLoveRust
发布2022-04-18 15:40:13
6210
发布2022-04-18 15:40:13
举报

Deref coercion(自动解引用类型转换)精制总结

  • 语法功能:
    • 实现【解引用】操作符*在自定义【智能指针】上的行为。从而,使【智能指针】如同【普通引用】一样使用。
  • 实质能力:
    • A类型的实例转换成B类型实例的引用,只要AB类型之间满足A: Deref<Target = B>A: DerefMut<Target = B>。更具体的描述,请见下表:
  • 自动触发场景:
    • 先对A类型实例完成Deref::deref(&A)处理和返回&B(或DerefMut::deref_mut(&mut A)返回&mut B
    • 再对B类型实例的引用&B执行解引用操作*,得到B实例
    • A类型实例上用.操作符调用B类型实例上的成员方法。
    • newtype设计模式利用这个技术点实现从外层包装类(即,智能指针)直接调用内部私有数据类型(被指向数据)的成员方法。
    • 函数调用 [例程1] 需要注意的只有一点:函数的实参必须是【智能指针】的【引用】(而不是【智能指针】自身)才可触发Deref coercion
    • 成员方法调用 [例程2]
    • 解引用操作。即,*A = B [例程3],因为这实际执行了两步操作:
  • 触发次数
    • &B满足·函数签名中形参的类型要求 --- 函数调用场景
    • &B上·找到了·被调用的成员方法 --- 成员方法调用场景
    • B未实现Deref / DerefMut trait,不再具备继续递归的条件。
    • AB都满足Deref / DerefMut trait限定条件,那么A -> &B的【解引用-类型转换】将被递归地连续执行,直至如下三个条件之一被达成,而结束递归:
  • 执行时间点
    • 编译时,而不是运行时 --- 这又是一个零成本抽象。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Deref coercion(自动解引用类型转换)精制总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档