引用向量中的整数

问题描述 投票:0回答:1

我现在正在学习生锈,似乎无法理解在书中的这个例子中使用

&
的意义:https://doc.rust-lang.org/stable/book/ch08-01- vectors.html#reading-elements-of-vectors

let v = vec![1, 2, 3, 4, 5];

let third: &i32 = &v[2];

这两个代码示例不是等价的吗?

let v = vec![1, 2, 3, 4, 5];

let third: i32 = v[2];

我对

&i32
特别困惑。关键是,我在
i32
处共享指向
index 2
的相同指针吗?这有可能吗,因为我认为简单的值总是会被复制,因此你不能从两个地方引用一个简单的值。

如果有人能帮我解决这个问题,我将不胜感激。

rust vector borrow-checker
1个回答
0
投票

这有可能吗,因为我认为简单的值总是会被复制,因此你不能从两个地方引用一个简单的值。

规则不是复制而不是引用“简单值”(更准确地说,是实现

Copy
特征的值)。相反,它们是被复制而不是moved。复制发生在
let third: i32 = v[2];
点,如果您使用非
Copy
类型,那么它将是一个错误:

let v = vec![vec![1, 2], vec![3, 4], vec![5, 6]];

// error[E0507]: cannot move out of index of `Vec<Vec<i32>>`
let third: Vec<i32> = v[2];

(如果您想复习这些概念,请参阅 §4.1 什么是所有权? 讨论移动、副本和

Copy
。)

Rust 允许你引用任何类型。有时这是毫无意义的;例如,

&i32
并不比
i32
更有用,但您仍然可以创建它。 (但是
&mut i32
可能对就地修改
i32
很有用。)

所以,这两个例子都是允许的。在使用

i32
的实际程序中(而不是其他一些非
Copy
类型),您几乎总是会编写第二个——但是使用
Copy
类型允许 demonstring the relationship.

© www.soinside.com 2019 - 2024. All rights reserved.