【问题标题】:Does a mutable String reference implement Copy [duplicate]可变字符串引用是否实现复制 [重复]
【发布时间】:2021-07-22 01:29:08
【问题描述】:

在下面的代码中,我希望编译器在hello 函数自mutable references do not implement Copy 以来的第二次调用中抱怨使用移动值:外部参照。编译器不会引发任何此类错误。我在这里错过了什么?

fn main() {
    let mut x: String = "Developer".to_string();
    let x_ref: &mut String = &mut x;
    hello(x_ref);
    hello(x_ref);
}

fn hello(a: &mut String) {
    println!("Hello {}", a);
}

【问题讨论】:

  • 关于您的deleted comment由于现有问题的标题非常不同,因此在提问之前他们将无法自己找到这些问题 — 是的,那是 究竟为什么 SO有重复。通过将您的问题标记为重复,如果人们使用您的措辞,他们会找到正确的答案。通过删除您的问题,您消除了这种可能性。 重复不是坏事

标签: rust


【解决方案1】:

您的示例一个接一个地使用可变引用,这允许编译器执行implicit reborrow。它基本上把这段代码变成了这样:

    hello(&mut *x_ref);
    hello(&mut *x_ref);

现在你有两个单独的可变借用,每个只在函数调用的生命周期内,因此它们不会相互冲突。

如果您尝试同时使用两次,您会看到一个错误。

fn main() {
    let mut x: String = "Developer".to_string();
    let x_ref: &mut String = &mut x;
    hello(x_ref, x_ref);
}

fn hello(a: &mut String, b: &mut String) {
    println!("Hello {} and {}", a, b);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2015-07-02
    • 1970-01-01
    相关资源
    最近更新 更多