以下代码会在 let c = a;
处因为编译错误 "use of moved value: a
" 而失败:
fn main() {
let a: &mut i32 = &mut 0;
let b = a;
let c = a;
}
a被移动到b中,不再可以分配给c。目前为止,一切都很好。
然而,如果我只注释b
的类型,其余内容保持不变:
fn main() {
let a: &mut i32 = &mut 0;
let b: &mut i32 = a;
let c = a;
}
代码再次在let c = a;
处出现故障。
但这次错误消息完全不同:“无法移动a
,因为它已被借用……*a
的借用发生在此处:let b: &mut i32 = a;
”
所以,如果我只是注释b
的类型,就没有将a
移动到b
中,而是“重新”借用了*a
?
我漏掉了什么吗?
干杯。
&mut
引用来实现,在这种情况下,重新借用只是一个遵守借用规则的副本。 - LevansCopy
的类型,&
引用是可以Copy
的。移动或重新借用&mut
引用几乎是相同的事情(我没有看到任何情况下移动比重新借用更好)。基本上就是这样了。但是,我将在编译器的 Github 上开一个问题,建议他们在文档中澄清这一点。 - Levans