diff --git a/src/Ch15_Smart_Pointers.md b/src/Ch15_Smart_Pointers.md index 3a0b999..0ba5cf1 100644 --- a/src/Ch15_Smart_Pointers.md +++ b/src/Ch15_Smart_Pointers.md @@ -463,11 +463,11 @@ fn main() { 与使用 `Deref` 特质重写不可变引用上的 `*` 运算符类似,咱们可以使用 `DerefMut` 特质,重写可变引用上的 `*` 运算符。 -在以下三种情形下,Rust 会在他发现类型与特质的实现时,执行强制引用转换: +在以下三种情形下找到类型与特质实现时,Rust 会执行解引用强制转换: -- 从 `&T` 强制转换为 `&U` 时,`T: Deref` -- 从 `&mut T` 转换为 `&mut U` 时,`T: DerefMut` -- 从 `&mut T` 转换为 `&U` 时,`T: Deref` +- 当 `T: Deref` 时,会从 `&T` 转换为 `&U`; +- 当 `T: DerefMut` 时,会从 `&mut T` 转换为 `&mut U`; +- 当 `T: Deref` 时,会从 `&mut T` 转换为 `&U`。 其中前两个情形,除了第二种实现了可变外,他们是同样的。第一种情形指出了在咱们有着一个 `&T`,且 `T` 对某种类型 `U` 实现了 `Deref` 特质,那么就显然能得到一个 `&U`。第二种情形则指出了对可变引用,同样会发生解引用强制转换。