【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:59:04阅读更多 →
SQL2025 数据库无法编辑

SQL2025 数据库无法编辑

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

2026/7/23 18:59:04阅读更多 →
研磨螺杆安装同轴度公差标准是什么

研磨螺杆安装同轴度公差标准是什么

在机械安装行业中,研磨螺杆的安装同轴度至关重要,它直接影响到机械设备的运行精度和稳定性。以下是不同精度等级对应的同轴度核心指标以及其他相关公差数值:螺杆与导轨平行度公差:C3级≤0.01mm/1000mm,C5级≤0.02mm/10…

2026/7/23 18:59:04阅读更多 →
从标准SPI到MibSPI:多缓冲与自动触发如何提升嵌入式通信效率

从标准SPI到MibSPI:多缓冲与自动触发如何提升嵌入式通信效率

1. 项目概述:从标准SPI到MibSPI的演进在嵌入式系统开发中,串行外设接口(SPI)几乎是工程师们最熟悉的老朋友之一。它简单、直接,一个时钟线、两根数据线,加上片选,就能让主控芯片和传感器、存储器…

2026/7/23 20:19:30阅读更多 →
HarmonyOS 无障碍体验实战:朗读标签、焦点顺序与高对比模式

HarmonyOS 无障碍体验实战:朗读标签、焦点顺序与高对比模式

HarmonyOS 无障碍体验实战:朗读标签、焦点顺序与高对比模式 无障碍不是最后补几个标签。读屏用户能不能理解按钮含义,键盘或辅助设备能不能按正确顺序移动焦点,高对比模式下文字是否仍然可读,都会决定用户能否完成任务。本文用一个…

2026/7/23 20:19:30阅读更多 →
【Linux系统编程】进程控制(一)——进程创建与进程终止

【Linux系统编程】进程控制(一)——进程创建与进程终止

文章目录1. 进程创建1.1 fork系统调用1.2 写时拷贝1.3 fork常规用法1.4 fork调用失败的原因2. 进程终止2.1 进程终止的场景2.2 进程常见的退出方法2.2.1 return 退出退出码2.2.2 exitreturn方式 vs 函数exit2.2.3 _exitexit函数 vs 系统调用_exit缓冲区在哪里呢?本节…

2026/7/23 20:19:30阅读更多 →
ICM创芯微 CM1002-C SOT23-6 BMS电池保护芯片

ICM创芯微 CM1002-C SOT23-6 BMS电池保护芯片

特性 高精度电压检测功能 过充电保护电压 3.500V ~ 4.600V,精度 25mV 过充电解除电压 3.100V ~ 4.600V,精度 45mV 过放电保护电压 2.000V ~ 3.400V,精度 50mV 过放电解除电压 2.000V ~ 3.400V,精度 100mV 放电过流保护电压 0.015V…

2026/7/23 20:19:30阅读更多 →
MibSPI寄存器配置全解析:从引脚控制到多缓冲传输实战

MibSPI寄存器配置全解析:从引脚控制到多缓冲传输实战

1. MibSPI控制寄存器概览与设计哲学在嵌入式开发,尤其是汽车电子和工业控制领域,德州仪器的MibSPI模块因其多缓冲架构和并行引脚选项而备受青睐。但很多工程师在初次接触其寄存器手册时,往往会感到困惑:为什么一个SPI模块需要多达…

2026/7/23 20:19:30阅读更多 →
出海AI企业搭建算力基础设施,要满足哪些核心性能要求?

出海AI企业搭建算力基础设施,要满足哪些核心性能要求?

算力出海这件事,前前后后帮客户做了几十次,最关键的底线其实就四条:GPU算力密度、跨区域网络延迟、存储吞吐带宽、安全合规。不同阶段要求不一样,选错直接拉高成本还拖工期。一、AI算力出海,性能瓶颈通常卡在哪大部分问…

2026/7/23 20:17:30阅读更多 →
Go语言静态资源打包方案对比与实践指南

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

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

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/23 0:56:31阅读更多 →
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:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

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

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

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →