设为首页
收藏本站
开启辅助访问
全部
问与答
创意
技术
酷工作
生活
交易
资源
节点
飞墙
Follow
明白贴
影视
报酬
登录
注册
飞社-令人惊奇的创意工作者社区-
›
首页
›
Rust
›
rust 的指针问题
FSHEX=FIND+SHARE+EXPRESS
飞社-令人惊奇的创意工作者社区- 是一个关于发现分享表达的地方
现在登录
没有账号?
立即注册
推荐主题
›
社保缴纳基数引发的讨论,表示理解不了
›
车牌摇到号了,无奈手头不宽裕,纠结是买二
›
去马来西亚做计算机靠谱吗?
›
最终还是对开发者下手了🤣
›
北京自如遇到恶心合租室友
今日热议主题
代金券锁券优化方式
G309 右键容易误触,正常吗?
赣南脐橙已经黄了, 11 月 3 号可以摘但是
公司不续签合同不想给补偿
创业的第三款产品,一款可以把日记图片生成
Things3 开启了黑五活动,优惠 30%
M4 的 gpu 比 m3 的 gpu 有提升么?大概提
上海公共户没啥用,确实做到租售同权了
白群晖 ds920 的 m2 缓存位改存储池稳定吗
如何快速从三星手机恢复数据到 iPhone
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 怎么安全地在多个地方可变借用,有很多语法糖可以用。
返回顶部