可变引用 rust [duplicate]

Mutable references rust [duplicate]

提问人:Daan van der Plas 提问时间:10/21/2022 最后编辑:frankplowDaan van der Plas 更新时间:10/21/2022 访问量:283

问:

fn main() {
    let mut x = 42;
    let y = &x;
    *y = 5;
}

这不会编译。为什么它必须是 a to ? 在我的理解中,引用(即存储 of 值的地址)不会改变,只会改变存储在该地址上的值。并且是.&mutxxxmut

编译:

fn main() {
    let mut x = 42;
    let y = &mut x;
    *y = 5;
}
参考 可变

评论

1赞 Ömer Erden 10/21/2022
DerefMutDeref
0赞 tadman 10/21/2022
提示:你打算如何修改非引用? 是只读的。 可以变异。mut&x&mut x
0赞 eggyal 10/21/2022
在您的第一个示例中,采用共享借用 ;这是 Rust 内存安全模型的一个基本原则,即值在(非排他性)借用时不能被改变。在第二个示例中,借用是排他性的。yx
0赞 user4815162342 10/21/2022
如果您认为这会编译:.现在,如果允许这样的事情,有什么可以阻止你修改非 x 的呢?let x = 42; let y = &x*y = 5mut

答:

1赞 frankplow 10/21/2022 #1

的含义是可以改变值的引用,而不是本身可以改变的引用。 表示无法更改值的引用。一个本身可以变异的引用会写成这样(尽管在实践中这并不常见)。&mut&let mut y = &x;

在我的理解中......引用(即存储 x 值的地址)......

我认为这里的混淆源于这样一个事实,即引用与内存地址或指针并不完全相同。它更具概念性,并提供了更多保证 - 例如,引用将始终指向给定类型的有效对象。