[Rust编程之道笔记]Deref解引用
Rust编程之道一书 3.5.1 Deref解引用
3.5.1 解引用
rust 的隐式类型转换基本上只有自动解引用。自动解引用的目的主要是方便开发者使用智能指针。
自动解引用
自动解引用虽然是编译期来做的,但是自动解引用的行为可以由开发者来定义。
引用使用 &
操作符,而解引用使用 *
操作符。可以通过实现 Deref trait 来自定义解引用操作。
Deref 有一个特性是强制隐式转换,规则是这样:如果有一个类型T实现了 Deref<Target=U>
,则该类型T的引用(或者智能指针)在应用的时候会被自动转换为类型U。
Deref内部实现:
pub trait Deref {
type Target: ?Sized;
fn deref(&self) -> &Self::Target;
}
pub trait DerefMut : Deref {
fn deref_mut(&mut self) -> &mut Self::Target;
}
DerefMut 和 Deref 类似,不过返回的是可变引用。
实现 Deref 的目的是简化编程,避免开发者自己手工转换。
手动解引用
如果某类型和其解引用目标类型中包含了相同的方法,编译期就不指导该用哪一个了,此时就需要手动解引用。