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

时间:2019-09-05 15:44:18

标签: arrays rust slice

我目前对Rust中的[T]&[T]感到困惑。让我们从我所知道的开始:

  • [T; n]是n个元素组成的数组,
  • &[T; n]是具有n个元素的数组的指针,
  • [T]的大小未定,并指向元素T的序列,而
  • &[T]是大小合适的粗体指针,指向元素T的序列。

我的困惑始于两个项目的命名约定。他们在documentation of 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]

和状态

  

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

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

谢谢!

1 个答案:

答案 0 :(得分:6)

  

项目[T]的名称是什么? [T]的确切用途是什么?

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

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