关于Rust中Vector的特征索引实现

时间:2018-02-22 16:23:28

标签: rust

我在doc中检查了索引特征,并找到index()的返回类型是&T

然后我写这个函数来从vector得到值:

fn get_value_test(a: usize, v: &Vec<i32>) -> i32 {
    v[a]
}

我的问题是:为什么v[a]i32&i32?因为i32 ...have a known size at compile time are stored entirely on the stack, so copies of the actual values are quick to make? (来自here

看起来Rust在这种情况下有隐藏规则来转换类型吗?

1 个答案:

答案 0 :(得分:8)

这里有一个小误导。虽然Index<Idx>的方法原型为fn index(&self, index: Idx) -> &T,但语法运算符x[i] 确实取消引用&T的输出:

  

container[index]实际上是*container.index(index) [...]的语法糖。如果let value = v[index]的类型实现value,则可以使用Copy这样的好东西。

所以你去吧。您的函数确实从向量返回值的副本,但不是从隐式转换返回。如果原始意图是真正检索对该值的引用,那么您将执行&x[i]

另见: