动态大小类型
大多数类型具有在编译时已知的固定大小,并实现了 Sized trait。大小仅在运行时才知道的类型称为动态大小类型(DST),或非正式地称为无大小类型。切片、trait 对象和 str 是 DST 的示例。
此类类型只能在某些情况下使用:
- 指向 DST 的指针类型具有固定大小,但大小是指向有大小类型的指针的两倍
- 指向切片和
str的指针还存储元素数量。 - 指向 trait 对象的指针还存储一个指向虚表的指针。
- 指向切片和
- DST 可以作为类型实参提供给具有特殊
?Sized约束的泛型类型参数。当对应的关联类型声明具有?Sized约束时,它们也可以用于关联类型定义。默认情况下,任何类型参数或关联类型具有Sized约束,除非使用?Sized放宽。
- 可以为 DST 实现 trait。与泛型类型参数不同,
Self: ?Sized在 trait 定义中默认生效。
- 结构体可以包含一个 DST 作为最后一个字段;这使得结构体本身成为 DST。