当前位置: 首页 > 知识库问答 >
问题:

为什么通过指针对同一值的多个可变引用在 Rust 中是合法的

呼延才
2023-03-14

我正在努力理解Rust的所有权和借款模式,并对以下内容感到困惑:

let mut x: i32 = 1;
let ref_x = &mut x;
let refref_x = &mut *ref_x;
*refref_x = 2;
*ref_x = 3;

据我所知,我有效地创建了对x的两个独立的可变引用。为什么在避免通过指针进行间接寻址并将第3行更改为

let refref_x = &mut x;

显然不是吗?我是误解了中心概念还是编译器在后台添加了一些魔力?

共有1个答案

华欣怡
2023-03-14

据我所知,我正在有效地创建两个单独的 x 可变引用。

不,第二个引用借用(因此锁定)第一个引用,因为如果您尝试在第二个引用仍然有效时使用第一个引用,您可以看到:

let mut x: i32 = 1;
let ref1 = &mut x;
let ref2 = &mut *ref1;
*ref1 = 3; // <- can not assign because ref1 is borrowed (by the previous line)
*ref2 = 2;

< code>ref2是< code>ref1的重新箭头。这并不奇怪你会感到困惑,因为这是一个没有被很好地记录的特性,尽管是一个非常重要的特性。

是我误解了中心概念,还是编译器在后台添加了一些魔力?

两者兼而有之,基本上

顺便说一句,这可能会在你第一次遇到强制移动时导致更多的混乱。

 类似资料: