Dynamically Sized Types
动态内存宽度类型
dynamically-sized-types.md
commit: 83f725f1b9dda6166589d7b715b75b7f54143b8e
本章译文最后维护日期:2021-07-31
大多数的类型都有一个在编译时就已知的固定内存宽度,并实现了 trait Sized
。只有在运行时才知道内存宽度的类型称为动态内存宽度类型(dynamically sized type)(DST),或者非正式地称为非固定内存宽度类型(unsized type)。切片和 trait对象是 DSTs 的两个例子。此类类型只能在某些情况下使用:
- 指向 DST 的指针类型的内存宽度是固定的(sized),但是是指向固定内存宽度类型的指针的内存宽度的两倍
- 指向切片的指针也存储了切片的元素的数量。
- 指向 trait对象的指针也存储了一个指向虚函数表(vtable)的指针地址
- DST 可以作为类型实参( type arguments)来传给有
?Sized
约束的泛型参数。 当关联类型的声明有?size
约束时,它们也可以被用于关联类型定义。 默认情况下,任何类型参数或关联类型都有Sized
约束,除非它们使用了Sized
来放宽其约束。 - 可以为 DSTs 实现 trait。
与泛型类型参数中的默认设置不同,在 trait定义中,
Self: ?Sized
约束是默认情况。 - 结构体可以包含一个 DST 作为最后一个字段;这使得该结构体也成为是一个 DST。