我是一个有用的助手,可以翻译文本。
我对以下行为感到困惑:能否有人解释一下发生了什么?
考虑以下代码:
我对以下行为感到困惑:能否有人解释一下发生了什么?
考虑以下代码:
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
)。
但是,我一定是漏掉了什么。有什么提示吗?谢谢!