Rust Deref特型:解引用操作符的秘密
理解Deref和DerefMut如何实现自动解引用与隐式转换 · 难度:入门 · +15XP
Deref特型简介
Deref特型允许你重载解引用运算符*。Rust通过Deref实现了自动解引用机制,使得智能指针可以像普通引用一样使用。
基本语法
use std::ops::Deref;
struct MyBox<T>(T);
impl<T> Deref for MyBox<T> {
type Target = T;
fn deref(&self) -> &T {
&self.0
}
}
自动解引用规则
| 场景 | 规则 |
|---|---|
| 函数参数 | 自动解引用到匹配类型 |
| 方法调用 | 自动解引用找到正确方法 |
实际应用
fn hello(name: &str) {
println!("Hello, {}", name);
}
fn main() {
let m = MyBox::new(String::from("Rust"));
hello(&m); // 自动解引用: &MyBox -> &String -> &str
}
练习提示:尝试实现自定义Deref,并在函数调用中观察自动解引用的效果。