动态尺寸类型
dynamically-sized-types.md
commit: af1cf6d3ca3b7a8c434c142148742aa912e37c34
本章译文最后维护日期:2020-11-14
大多数的类型都有一个在编译时就已知的固定尺寸,并实现了 trait Sized
。只有在运行时才知道尺寸的类型称为动态尺寸类型(dynamically sized type)(DST),或者非正式地称为非固定尺寸类型(unsized type)。切片和 trait对象是 DSTs 的两个例子。此类类型只能在某些情况下使用:
- 指向 DST 的指针类型的尺寸是固定的(sized),但是是指向固定尺寸类型的指针的尺寸的两倍
- 指向切片的指针也存储了切片的元素的数量。
- 指向 trait对象的指针也存储了一个指向虚函数表(vtable)的指针地址
- 当接受了
?Sized
约束时,DST 可以作为类型实参( type arguments)使用。默认情况下,任何类型形参(type parameter)都拥有Sized
约束。 - 可以为 DST 实现 trait。与类型参数中的默认设置不同,在 trait定义中默认存在
Self: ?Sized
约束。 - 结构体可以包含一个 DST 作为最后一个字段,这使得该结构体也成为是一个 DST。