我目前对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]
的确切用法是什么?您不能将其嵌入到结构(未调整大小)中,出于相同的原因,也不能在参数中采用此类型。我不知道它的实际用法。
谢谢!
答案 0 :(得分:6)
项目
[T]
的名称是什么?[T]
的确切用途是什么?
[T]
是一块连续的内存,填充有T
类型的项目。很少直接用名称来引用它,因为它必须在指针后面才能有用。通常是&[T]
,通常称为切片,但也可以是其他指针类型。
“切片”一词已被重载,但通常不会引起混乱,因为它的使用范围并不大。通常,如果单独使用单词“ slice”,则表示&[T]
。如果它具有其他修饰符,则可能引用了不同的指针类型。例如,Box<[T]>
是"boxed slice",而Rc<[T]>
可能被称为“引用计数切片”。