【发布时间】:2020-01-08 13:27:23
【问题描述】:
我目前对 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] 到底有什么用?您不能将它嵌入到结构中(它是未调整大小的),出于同样的原因,您不能在参数中采用这种类型。我无法弄清楚它的实际用法。
谢谢!
【问题讨论】:
-
简单,
let a = [1, 2, 3, 4, 5];不是[T],它是一个数组[T; 5]。你不能构造一个[T] -
嘿!谢谢你的评论。我了解数组类型 (
[T, n])。我的问题实际上是关于切片类型的。 -
我的评论是关于 slice - - doc.rust-lang.org/book/ch04-03-slices.html#other-slices
-
简单地说,两者都是切片,但你不能构造一个
[T],因为它没有大小。要获得可用的切片,您需要在某处进行间接寻址&[T]。 -
人们不会用任何名字称呼
[T],因为它本身几乎从来没有用过。