【问题标题】:Mutable references rust [duplicate]可变引用生锈[重复]
【发布时间】:2022-10-21 19:05:21
【问题描述】:
fn main() {
    let mut x = 42;
    let y = &x;
    *y = 5;
}

这不编译。为什么它必须是&mutx? 据我了解,引用(即存储x 值的地址)不会改变,只会改变存储在该地址上的值。而xmut

是否编译:

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

【问题讨论】:

  • 提示:您将如何修改非mut 引用? &x 是只读的。 &mut x 可以变异。
  • 在您的第一个示例中,y 共享借用 x;这是 Rust 内存安全模型的基础,即值在(非排他性地)借用时不能被改变。在您的第二个示例中,借用是独占的。
  • 如果您认为它可以编译,可能会有所帮助:let x = 42; let y = &x。现在,如果允许*y = 5 之类的东西,有什么可以阻止您修改非mut x?

标签: rust reference mutable


【解决方案1】:

&mut 的含义是一个可以改变值的引用,而不是一个本身可以改变的引用。 & 表示一个引用,通过它不能改变一个值。本身可以变异的引用会写成let mut y = &x; 之类的东西(尽管在实践中这并不常见)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2022-11-17
    • 2020-05-21
    • 1970-01-01
    • 2014-10-25
    • 2021-03-07
    • 1970-01-01
    相关资源
    最近更新 更多