rust 的指针问题

102 天前
 jeesk
use std::fmt::Debug;
fn main() {
    let mut x = 100;
    let y = &mut x;
    *y = 100;
    *y = 200;
	
    // rust 不允许同时访问(x,y), 但是在 golang 里面可以这样使用。
    println!("{}", x);
    println!("{}",*y)
}


上面的代码在 rust 里面不可以使用, 问了 chatgpt 感觉没听懂, 有没有大佬能够通俗易懂的讲解一下, 为什么 rust 不允许这样?

1392 次点击
所在节点    Rust
6 条回复
binhb
102 天前
可变引用与不可变引用的作用域不能交叠
lzoje
102 天前
let y = &mut x; 就是把 x 的写权限交给了 y 。rust 里写权限是唯一的,只能由一个对象持有。
binhb
102 天前
@binhb 补充下 println! 中默认会对所有权变量做不可变借用操作
daolanfler
102 天前
natsu94
102 天前
这是 rust 管理内存的方式,你按他来能做到他声称的内存安全,golang 则是由垃圾回收来做到
libook
102 天前
编译器已经说很明白了,let y = &mut x;这一行 x 已经被可变借用了,下面 println!要重复借用,Rust 里可变借用是排他的,因为你不不知道上一个借走的会不会修改了它的值导致下一个读到的是脏数据(数据竞争),你可以再问问 GPT 怎么安全地在多个地方可变借用,有很多语法糖可以用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1071725

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX