gpt4 book ai didi

rust - move 原始实例后,不会反射(reflect)使用字段可变引用的更改

转载 作者:行者123 更新时间:2023-12-02 00:36:54 25 4
gpt4 key购买 nike

我试图操纵该领域 x结构 Foo通过从其实例中借用可变引用 foo .
如果我尝试打印字段 x使用 move 装订y实例 foo 原始实例的 move ,它不断打印没有改变的值。
下面的简化示例:

struct Foo {
x: i32,
}

fn main() {
let mut foo = Foo { x: 42 };
let x = &mut foo.x;
*x = 13;
let y = foo;
println!("{}", y.x); // -> 42; expected result: 13
}
相反,如果我打印 move 的装订 y本身,它会打印更改后的值。
println!("{:?}", y); // -> Foo { x: 13 }
或者,如果我打印其他内容,例如 xfoo.x 之前 move ,它会按预期打印内容。
println!("{}", x); // -> 13
let y = foo;
println!("{}", y.x); // -> 13
这是预期的行为吗?

最佳答案

这是编译器中的一个已知错误,仅影响 rustc 1.45。 rustc 1.44 不受影响,该问题已在 Beta 版上修复,这意味着它将在 rustc 1.46 上修复。
一个问题 has been opened跟踪它。
虽然这个问题看起来很严重,但根据 oli-obk 在实际代码中不太可能发现。 ,rustc 的主要贡献者之一,尤其是在 const 上表达式:

The bug is almost impossible to trigger on real world code. You need all values that are going into the bug to be constant values and there can't be any control flow or function calls in between.


版本 1.45.1 has been released并包含一个 backport of the fix from beta , 除其他事项外。更新版本 1.45.2发布了更多(不相关的)修复程序。

关于rust - move 原始实例后,不会反射(reflect)使用字段可变引用的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63087217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com