Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

动态大小类型(Dynamically Sized Type)

大多数类型具有在编译时已知的固定大小,并实现 trait Sized。大小仅在运行时已知的类型称为_动态大小类型_(DST),或者非正式地称为未大小类型。切片trait 对象strDST 的示例。

此类类型只能在某些情况下使用:

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

Note

变量、函数参数、const 项和 static 项必须是 Sized 的。