动态大小类型

大多数类型都有一个在编译时已知的固定大小,并实现了 Sized 特征。大小仅在运行时才知道的类型称为*动态大小类型*(*DST*),或者非正式地称为无大小类型。 切片特征对象DST 的两个例子。此类类型只能在某些情况下使用

  • 指向 DST 的指针类型 是有大小的,但大小是指向有大小类型的指针的两倍。
    • 指向切片的指针还存储切片的元素数量。
    • 指向特征对象的指针还存储指向虚函数表的指针。
  • DST 可以作为类型参数提供给具有特殊 ?Sized 边界的泛型类型参数。当相应的关联类型声明具有 ?Sized 边界时,它们也可以用于关联类型定义。默认情况下,任何类型参数或关联类型都有一个 Sized 边界,除非使用 ?Sized 放宽。
  • 可以为 DST 实现特征。与泛型类型参数不同,Self: ?Sized 是特征定义中的默认值。
  • 结构体可以包含一个 DST 作为最后一个字段;这使得结构体本身成为一个 DST

**注意**:变量、函数参数、const 项和 static 项必须是 Sized