动态大小类型
大多数类型都具有在编译时已知固定大小,并实现了 Sized trait。大小仅在运行时才已知的类型称为动态大小类型(DST),或者非正式地称为非大小类型(unsized type)。切片(Slices)和trait 对象(trait objects)是DST的两个例子。
这类类型只能在特定情况下使用。
- 指向DST的指针类型是大小确定的(sized),但其大小是指向大小确定类型(sized types)的指针的两倍。
- 指向切片的指针还存储了切片的元素数量。
- 指向 trait 对象的指针还存储了一个指向 vtable 的指针。
- DST可以作为具有特殊
?Sized边界(bound)的泛型类型参数的类型实参提供。当相应的关联类型声明具有?Sized边界时,它们也可以用于关联类型定义。默认情况下,任何类型参数或关联类型都具有Sized边界,除非使用?Sized放宽了该限制。
- Trait 可以为DST实现。与泛型类型参数不同,在 trait 定义中,
Self: ?Sized是默认设置。
- Struct 可以包含一个DST作为最后一个字段;这使得 struct 本身成为一个DST。
注意
变量(Variables)、函数参数、const 项(const items)和static 项(static items)必须是
Sized的。