切片索引如何在Rust中工作?

时间:2016-11-07 08:32:37

标签: indexing rust

我想知道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中没有指针索引。那么索引这个东西怎么样呢?它只是一个内置的编译器吗?

1 个答案:

答案 0 :(得分:1)

  

它只是一个内置的编译器吗?

是。源代码评论也说同样的。 [T]是一个未分类的类型,无论如何都需要一些额外的规则。例如,未分类的类型不能存在于堆栈中(很难处理)。但是对unsized类型的引用包括一个指针和一个大小(特别是&#34; 完成类型的东西&#34;)。

但请注意,表达式的计算方式如下:&((*self)[index])。这意味着self(类型&[T])被解除引用为类型[T],然后编入索引。这会返回T,但我们只需要引用它,即&