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

Why does indexing a Vec return a value instead of a reference as promised by the Index?

Index 特性的文档说 .index() 方法 returns 对 Output 关联类型的引用 (link):

fn index(&self, index: Idx) -> &Self::Output;

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

类型
let v = vec![0];
let a = v[0];

然而,a的类型是i32。为什么?我正在学习 Rust,据我所知,Rust 要求你在任何地方都是显式的,并且从不隐式执行 value<->reference 转换。因此问题。

括号为 de-sugared 时添加了自动取消引用。 std::ops::Index documentation 表示,“container[index] 实际上是 *container.index(index) 的语法糖。”