以下代码无法编译,因为move之后使用了x(由于x的类型为&mut u8,它没有实现Copy trait)。
顺便提一下,如果我把
对我来说,似乎没有什么改变,
为什么?有什么区别?
fn main() {
let mut a: u8 = 1;
let x: &mut u8 = &mut a;
let y = x;
x;
}
据我了解,y
隐式地具有类型 &mut u8
但是如果我显式指定y
的类型,它将会编译。以下代码可以编译:
fn main() {
let mut a: u8 = 1;
let x: &mut u8 = &mut a;
let y: &mut u8 = x;
x;
}
顺便提一下,如果我把
let y: &mut u8 = x;
改成 let y: &u8 = x;
,它仍会编译通过。对我来说,似乎没有什么改变,
y
在第一个示例中是 &mut u8
,在第二个示例中也是 &mut u8
,但前者不能编译通过,而后者可以编译通过。为什么?有什么区别?
&u8
。 - Hristo Kolevlet y: &u8 = x;
也可以编译通过。 - Andyerror[E0382]: use of moved value:
x`` - Andyy
的类型会改变x
被移动到重新借用x
(寿命更短),因此由于y
未被使用,重新借用立即结束,x
再次可用。然而,我不知道原因是什么... - Matthieu M.