现在这是被禁止的。
以前是允许的。然而,这是旧借用检查器中的一个错误,并且在引入新的借用检查器 (NLL) 时已发出警告,然后出现错误。
例如,对于rustc 1.39.0
2015 版,您会收到以下警告:
warning[E0382]: assign to part of moved value: `p1`
--> a.rs:8:5
|
6 | let mut p1 = Point { cx: 100 };
| ------ move occurs because `p1` has type `Point`, which does not implement the `Copy` trait
7 | let p2 = p1;
| -- value moved here
8 | p1.cx = 5000;
| ^^^^^^^^^^^^ value partially assigned here after move
|
= warning: this error has been downgraded to a warning for backwards compatibility with previous releases
= warning: this represents potential undefined behavior in your code and this warning will become a hard error in the future
= note: for more information, try `rustc --explain E0729`
rustc 1.40.0
把它变成了一个错误:
error[E0382]: assign to part of moved value: `p1`
--> src/main.rs:7:5
|
5 | let mut p1 = Point { cx: 100 };
| ------ move occurs because `p1` has type `Point`, which does not implement the `Copy` trait
6 | let p2 = p1;
| -- value moved here
7 | p1.cx = 5000;
| ^^^^^^^^^^^^ value partially assigned here after move
error: aborting due to previous error
另请注意,这是 2018 版较长时间的错误(可能自该版本创建以来)。
也可以看看: