主要观点:Rust 中值和引用有区别,本周了解到该区别在 trait 对象中的新情况。
关键信息:
- 介绍了动态大小类型如
[u8]
、[u8; 40]
及相关概念。 - 阐述了 trait 对象如
dyn Read
及其布局,与 C++对象和虚表的对比。 - 提到 trait 对象的强制转换,如
let r: &dyn Read = &f;
。 - 指出另一种与泛型相关的 trait 强制转换,如
let r: &BufReader<dyn Read> = &b;
及其底层规范原因。 - 说明
Box<File>
到Box<dyn Read>
的强制转换及相关魔法特质。
重要细节: y: &usize = &x
中y
是usize
的引用,其具体值是指针。[u8]
是未知大小字节序列,常通过&[u8]
交互。struct Test<X:?Sized> { inner: X, }
中Test<[u8]>
是动态大小类型。- trait 对象
dyn Read
布局与所包装的值相同,常通过引用交互。 &mut T
可隐式转换为&T
,在 trait 对象中也有类似强制转换。BufReader<File>
内部的File
可强制转换为 trait 对象。- 关于
Box
、Rc
替代BufReader
时不编译的原因未明确说明。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。