有没有人能解释一下&v[0]
和v[0]
之间的区别,其中v
是Vector
?如果让我猜它类似于"借用"和"移动",然而下面的例子会提出不同的原因。
(一)
您可以通过引用索引号来访问矢量项:
let mut data = vec![5, 10, 15];
let first = &data[0];
println!("The first element is {}", first);
要更改特定项目的值,请参阅索引号:
let mut data = vec![5, 10, 15];
data[0] = 15;
为什么不在示例2中使用&data[0]
,而在示例1中相反?如果向量中的类型没有实现Copy
trait,数据会被移动吗?
PS:我是C++背景的。
1条答案
按热度按时间irtuqstp1#
方括号索引语法会自动对
Index
或IndexMut
trait返回的结果进行derefs,解析为存储在数据结构中的值,而你必须显式引用才能得到一个引用。这意味着你的例子去糖了
对于使用整数的示例(
Copy
类型,意味着它们在移动后仍然可以使用),在第一种情况下,确实没有理由使用引用而不仅仅是data[i]
。