mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2024-12-27 13:21:09 +08:00
Update Ch15
This commit is contained in:
parent
f0ec5d8d61
commit
3bf21ebb0e
@ -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`。第二种情形则指出了对可变引用,同样会发生解引用强制转换。
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user