我想知道Rust里有什么切片。事实证明,它只是一个带有数据指针和内部大小的结构。我查看了索引的来源,我found this:
impl<T> ops::Index<usize> for [T] {
type Output = T;
fn index(&self, index: usize) -> &T {
// NB built-in indexing
&(*self)[index]
}
}
我不是Rust专家,但&(*self)
似乎是我的指针,据我所知,Rust中没有指针索引。那么索引这个东西怎么样呢?它只是一个内置的编译器吗?
答案 0 :(得分:1)
它只是一个内置的编译器吗?
是。源代码评论也说同样的。 [T]
是一个未分类的类型,无论如何都需要一些额外的规则。例如,未分类的类型不能存在于堆栈中(很难处理)。但是对unsized类型的引用包括一个指针和一个大小(特别是&#34; 完成类型的东西&#34;)。
但请注意,表达式的计算方式如下:&((*self)[index])
。这意味着self
(类型&[T]
)被解除引用为类型[T]
,然后编入索引。这会返回T
,但我们只需要引用它,即&
。