gpt4 book ai didi

rust - 为什么创建对取消引用的可变引用的可变引用有效?

转载 作者:行者123 更新时间:2023-11-29 07:47:39 26 4
gpt4 key购买 nike

我知道你不能在 Rust 中同时创建两个对一个对象的可变引用。我不完全理解为什么以下代码有效:

fn main() {
let mut string = String::from("test");
let mutable_reference: &mut String = &mut string;
mutable_reference.push_str(" test");
// as I understand it, this creates a new mutable reference (2nd?)
test(&mut *mutable_reference);

println!("{}", mutable_reference);
}

fn test(s: &mut String) {
s.push_str(" test");
}

最佳答案

规则

在任何时间点,只有一个可用对特定值的可变引用。

这不是空间排斥(同一件作品可以有多个引用),而是时间排斥

机制

为了强制执行此操作,&mut T 不是Copy;因此调用:

test(mutable_reference);

应该将引用移动到test

实际上这样做会使它以后无法使用并且不太符合人体工程学,因此 Rust 编译器会插入一个自动重新借用,就像您自己做的一样:

test(&mut *mutable_reference);

如果你愿意,你可以强制移动:

test({ let x = mutable_reference; x });

效果

再借,本质上就是借:

  • mutable_reference 被借用,只要未命名的临时可变引用存在(或从中借用的任何东西),
  • 未命名的临时可变引用被移入test
  • 在 of 表达式处,未命名的临时可变引用被销毁,因此 mutable_reference 的借用结束。

关于rust - 为什么创建对取消引用的可变引用的可变引用有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45095523/

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