Update Ch15

This commit is contained in:
Unisko PENG 2023-05-09 14:01:51 +08:00
parent f0ec5d8d61
commit 3bf21ebb0e

View File

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