【Rust自学】15.3. Deref trait Pt.2:隐式解引用转化与可变性
15.3 Deref trait Pt.2隐式解引用转化与可变性15.3.1 函数和方法的隐式解引用转化隐式解引用转化deref coercion是为函数和方法提供的一种便捷特性。它的原理是假如类型T实现了Dereftrait那么解引用转化可以把T的引用转换成对T应用Deref之后得到的引用。当某个类型的引用被传给函数或方法但其类型与声明的参数类型不匹配时解引用转化会自动发生。编译器会对deref进行一系列调用把它转换成所需的参数类型。这个过程在编译时完成因此没有额外的性能开销。这句话比较抽象看个例子就明白了。我们接着上一篇文章的代码来写use std::ops::Deref; struct MyBoxT(T); implT MyBoxT { fn new(x: T) - MyBoxT { MyBox(x) } } implT Deref for MyBoxT { type Target T; fn deref(self) - T { self.0 } }这是上一篇文章的代码。它定义了MyBox元组结构体元组结构体的介绍详见 5.1. 定义并实例化struct创建了new函数并为其实现了Dereftrait因此可以对MyBox使用普通的解引用操作。以下是新增部分fn hello(name: str) { println!(Hello, {}, name); }hello函数接收str也就是字符串切片然后把它打印出来。再看主函数fn main(){ let m MyBox::new(String::from(Rust)); hello(m); }m是MyBoxString类型m就是MyBoxString。然而hello期望的是str但这段代码并不会报错。为什么首先MyBox已经实现了Dereftrait所以 Rust 可以调用deref把MyBoxString转换成String。这就是刚才那个比较抽象的规则。到这一步还没完。String和str是不同的类型那又是怎么转换的呢因为String也实现了Dereftrait而且它的deref实现返回的是str类型的字符串切片所以 Rust 会对String使用deref把String转换成str。最终类型就匹配了。如果 Rust 没有解引用转化写法会是这样hello((*m)[..]);先使用解引用运算符*把m从MyBoxString转换成String。再加上引用符号把String转换成String。通过切片语法[..]可以获得String完整内容的引用并将其值从String转换成str。15.3.2 解引用与可变性可以使用DerefMuttrait 来重载可变引用的*运算符。与Deref相比DerefMut多了Mut意思是DerefMut返回可变引用mut T而Deref返回不可变引用T。当类型和 trait 满足下列三种情况时Rust 会执行解引用转化- 当T: DerefTarget U时T可以转换成UT实现了Dereftrait且Deref下deref的返回类型是U因此T可以转换成U。例如上文代码中的MyBox类型实现了Deref其deref方法返回T所以MyBox可以转换成T。当T: DerefMutTarget U时mut T可以转换成mut U。T实现了DerefMuttraitDerefMut返回可变引用mut T且DerefMut下deref的返回类型是mut U因此mut T可以转换成mut U。当T: DerefTarget U时mut T可以转换成U。Rust 可以自动地把可变引用转换成不可变引用但反过来绝对不行。把不可变引用转换成可变引用要求该引用是唯一的借用规则中有讲详见 4.4. 引用与借用。

相关新闻

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

15.4 Drop trait:告别手动清理,释放即安全 15.4.1 Drop trait 的意义 如果某个类型实现了 Drop trait,就可以让程序员自定义值离开作用域时发生的操作。例如释放文件或网络资源。 在某些语言中(比如 C/C),对…

2026/7/23 18:58:44 阅读更多 →
SQL2025 数据库无法编辑

SQL2025 数据库无法编辑

目录 1.问题 2.查找到原因 3.安装最新的SQL管理工具 1.问题 安装了最近的SQL2025,可以查询等操作,但是无法进行编辑 2.查找到原因 SSMS 19.3 官方最高仅支持 SQL Server 2022,不支持 SQL Server 2025 现象:可以正常连接数据…

2026/7/23 18:58:44 阅读更多 →
矩阵账号视频同质化严重,AI 怎么做出差异化内容?

矩阵账号视频同质化严重,AI 怎么做出差异化内容?

一、发现问题:矩阵账号内容同质化导致流量衰退多数电商、MCN运营会搭建多平台、多账号矩阵体系,通过批量发布短视频扩大流量覆盖面。但矩阵运营过程中,普遍存在视频内容高度同质化的问题,多账号发布的视频镜头顺序、内容结构、文案…

2026/7/23 18:57:44 阅读更多 →

最新新闻

AI日报编制3.0:多模态数据整合与智能分析实践

AI日报编制3.0:多模态数据整合与智能分析实践

1. 项目概述"AI日报 - 2026年04月08日"这个标题看似简单,实际上蕴含着一个专业科技媒体或研究机构的核心工作流程。作为长期跟踪AI领域发展的从业者,我深知这类日报的编制远不止是信息汇总那么简单。它需要建立在对行业动态的持续监测、技术趋…

2026/7/23 19:10:49 阅读更多 →
科技型中小企业如何申请政府补贴?申报指南

科技型中小企业如何申请政府补贴?申报指南

一、为什么要看这份榜单 科技型中小企业在发展过程中,政府补贴是重要的资金来源,但申请流程复杂、政策更新快、材料准备繁琐,许多企业因缺乏专业指导而错失良机。本榜单旨在帮助科技型中小企业选择合适的科技咨询服务机构,提高政府…

2026/7/23 19:10:49 阅读更多 →
0基础录音转换成文字在线教程,看完就能直接上手

0基础录音转换成文字在线教程,看完就能直接上手

没有基础想做录音转换成文字在线操作,照着来就能直接上手,不用提前学什么复杂操作。这是我踩了三个学期坑整理出来的避坑方案,专门给需要转课堂录音、论文调研访谈录音的零基础学生准备的。如果你需要100%逐字高精度转写涉密或正式出版级的录…

2026/7/23 19:10:49 阅读更多 →
汽车电子面试问题记录

汽车电子面试问题记录

1.CAN如何实现仲裁 2.错误帧的类型 3.C语言基础 结构体,指针,指针函数,函数指针的区别 4.使用硬件IIC会有什么问题,硬件IIIC和软件IIC对比 5.CAN OTA的流程 6.静态变量如何实现跨文件使用:通过函数间接调用。 h…

2026/7/23 19:10:49 阅读更多 →
私域邦网络卖二返本模式系统开发

私域邦网络卖二返本模式系统开发

卖二返本模式系统开发指南编辑𝑽:araolin(土土哥)卖二返本模式是一种营销策略,消费者购买一定数量的商品后,系统自动返还部分或全部本金。以下是开发此类系统的关键步骤:核心功能设计用户管理模…

2026/7/23 19:10:49 阅读更多 →
ollama+open webui使用轻量级DeepSeek模型

ollama+open webui使用轻量级DeepSeek模型

ollama安装 在官网选择版本下载ollama,这里以Windows为例,我将OllamaSetup.exe下载到文件夹D:\program\ollama Download Ollama on macOS 如果是想直接安装可以双击OllamaSetup.exe,点击Install,它直接默认安装C盘。 下面是安…

2026/7/23 19:09:48 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻