设为首页
收藏本站
开启辅助访问
全部
问与答
创意
技术
酷工作
生活
交易
资源
节点
飞墙
Follow
明白贴
影视
报酬
登录
注册
飞社-令人惊奇的创意工作者社区-
›
首页
›
Rust
›
rust 的指针问题
FSHEX=FIND+SHARE+EXPRESS
飞社-令人惊奇的创意工作者社区- 是一个关于发现分享表达的地方
现在登录
没有账号?
立即注册
推荐主题
›
社保缴纳基数引发的讨论,表示理解不了
›
车牌摇到号了,无奈手头不宽裕,纠结是买二
›
去马来西亚做计算机靠谱吗?
›
最终还是对开发者下手了🤣
›
我老婆跟我观点完全不一样了。。。。
今日热议主题
975 出 E 卡 5000
老婆批了 6000 预算,选择新显卡还是 oppo
model3 还是 modely
厦门,王卡宽带 1000M, 40 一个月算贵吗?
忍无可忍!苹果手机怎么样屏蔽贷款电话,车
有没有从事医疗行业的大佬,报告模板设计器
给兄弟们分享一下 找对象的心得
中科大源 wget 报错
关于系统休眠->唤醒速度
家人们,这个值得买吗, n100 板 u
rust 的指针问题
jeesk
· 2024-9-10 17:11:27 · 61 次点击
```
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 不允许这样?
举报
·
61 次点击
登录
注册
站外分享
微信扫一扫
QQ分享
微博分享
豆瓣分享
复制链接
显示全部
|
最新评论
5 条回复
沙发
binhb
小成
2024-9-10 17:51:20
可变引用与不可变引用的作用域不能交叠
板凳
lzoje
初学
2024-9-10 17:53:19
let y = &mut x; 就是把 x 的写权限交给了 y 。rust 里写权限是唯一的,只能由一个对象持有。
地板
daolanfler
小成
2024-9-10 18:01:24
println!("{}", x); // 这里是 immutable reference
println!("{}", y); // 这里是 mutable reference
borrow checker 会会报错。
至于为什么单独 print 没问题,是因为 borrow checker 能在编译期检生命周期,知道后面没有冲突地使用
[the book 上有个类似的例子]( https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#:~:text=Note%20that%20a%20reference%E2%80%99s%20scope%20starts%20from%20where%20it%20is%20introduced%20and%20continues%20through%20the%20last%20time%20that%20reference%20is%20used.%20For%20instance%2C%20this%20code%20will%20compile%20because%20the%20last%20usage%20of%20the%20immutable%20references%2C%20the%20println!%2C%20occurs%20before%20the%20mutable%20reference%20is%20introduced%3A)
5#
natsu94
小成
2024-9-10 18:04:25
这是 rust 管理内存的方式,你按他来能做到他声称的内存安全,golang 则是由垃圾回收来做到
6#
libook
小成
2024-9-10 18:07:34
编译器已经说很明白了,let y = &mut x;这一行 x 已经被可变借用了,下面 println!要重复借用,Rust 里可变借用是排他的,因为你不不知道上一个借走的会不会修改了它的值导致下一个读到的是脏数据(数据竞争),你可以再问问 GPT 怎么安全地在多个地方可变借用,有很多语法糖可以用。
返回顶部