[T]和&[T]之间的混淆

Zen*_*ulz 8 arrays slice rust

我目前正在迷茫[T]&[T]在生锈。让我们从我所知道的开始:

  • [T; n] 是n个元素的数组,
  • &[T; n] 是指向具有n个元素的数组的指针,
  • [T]没有大小,并指向元素序列T,而
  • &[T]是大小粗的指针,指向一系列元素T

我的困惑从两个项目的命名约定开始。从Rust文档中,他们提供了以下示例:

let a: [i32; 5] = [1, 2, 3, 4, 5]; // An array of type [T, n]
let slice: &[i32] = &a[1..3]; // A slice of type &[T]
Run Code Online (Sandbox Code Playgroud)

和状态

该切片的类型为&[i32]。

因此,我假设&[T]称为切片。该商品的名字是什么[T]?到底有[T]什么用?您不能将其嵌入到结构中(未调整大小),出于相同的原因,也不能在参数中采用此类型。我不知道它的实际用法。

谢谢!

Pet*_*all 6

该商品的名字是什么[T]?到底有[T]什么用?

[T]是一块连续的内存,填充有类型的项T。很少直接用名称来引用它,因为它必须在指针后面才能有用。通常是a &[T],通常称为切片,但也可以是其他指针类型。

术语“切片”过载,但通常不会引起混淆,因为它的使用范围并不大。通常,如果单独使用“切片”一词,则表示&[T]。如果它具有其他修饰符,则可能引用了不同的指针类型。例如,Box<[T]>“盒装切片”Rc<[T]>可能称为“引用计数切片”。