为什么索引 Vec 返回一个值而不是索引所承诺的引用?

Str*_*sMG 20 operators rust

该特征的文档Index说该方法返回对关联类型(link.index() )的引用:Output

fn index(&self, index: Idx) -> &Self::Output;
Run Code Online (Sandbox Code Playgroud)

对于Vec<T>usize索引,OutputT。因此,我希望以下代码片段中的变量a具有类型&i32

let v = vec![0];
let a = v[0];
Run Code Online (Sandbox Code Playgroud)

然而, 的类型ai32. 为什么?我正在学习 Rust,据我了解,Rust 要求你在任何地方都必须明确,并且从不value<->reference隐式执行转换。因此就有了这个问题。

Joh*_*ica 24

当括号去糖时,会添加自动取消引用。文档说,“std::ops::Index实际上container[index]是 的语法糖*container.index(index)。”