【发布时间】:2020-04-14 06:25:51
【问题描述】:
我对以下行为感到困惑:有人可以解释发生了什么吗?
考虑代码:
struct Point {
cx : u32,
}
fn main() {
let mut p1 = Point { cx: 100 };
let p2 = p1;
p1.cx = 5000;
// println!("p1.x = {}", p1.cx); // disallowed as p1.cx is "moved" ... ok
println!("p2.x = {}", p2.cx); // ==> prints 100 (!)
}
具体来说,我很困惑:
- 即使发生移动,也允许更新到
p1.cx, -
p2.x返回的值其实不是更新后的5000,而是旧的100。
我期待新值,因为没有复制特征(因此移动),
所以期望只有一个单元格的更新值(5000)
应该打印。
但是,我一定错过了什么。有小费吗?提前致谢!
【问题讨论】:
标签: rust alias move ownership-semantics