主要观点: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) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。