动态尺寸类型

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

注意变量、函数参数、常量项和静态项必须是 Sized