Rust中变量与值,哪个让你又爱又恨?

2026-05-21 22:163阅读0评论服务器VPS
  • 内容介绍
  • 文章标签
  • 相关推荐

你有没有过这样的经历?写代码的时候,突然发现一个变量“消失”了或者一个值“不听话”地被改了?这种事几乎不会发生——主要原因是Rust把“变量与值”的关系管得死死的。但说实话,Rust的这套机制,有时候也让人又爱又恨,胡诌。。

变量和值,到底谁说了算?

提到这个... 在Rust中,变量和值的关系就像是一场“所有权”的争夺战。变量是值的“主人”,而值是变量的“财产”。一旦你把值的所有权给了别人,你就再也不能碰它了。这听起来很“霸道”,但确实有效。

66个让你对Rust又爱又恨的场景之一:变量与值

比如:

let x = 5;
let y = x; // x的所有权被“移动”给了y
println!; // ❌ 编译错误!x已经“死”了

栓Q! 是不是很绝?你刚想用x,后来啊它已经“不属于你”了。这就是Rust的“所有权”机制,它在编译阶段就帮你把内存平安问题扼杀在摇篮里。但说实话,这种“霸道”有时候也让人抓狂。

栈上值 vs 堆上值:谁更“听话”?

在Rust中,值可以存在两个地方:栈上和堆上。栈上值是“临时工”,用完就走;堆上值是“长期住户”,得自己动手释放,太坑了。。

栈上值, 比如:

let x = 5;
let y = x; // x的值被复制了不是“移动”

堆上值,比如:

let s = String::from;
let s2 = s; // s的所有权被“移动”了s就不能用了

是不是觉得有点“双标”?栈上值可以随便复制,堆上值却要“断舍离”?这就是Rust的“所有权”规则,它不允许你“脚踏两船”,坦白讲...。

智能指针:Rust的“保镖”

切中要害。 在Rust中, 智能指针就像是一群“保镖”,帮你管理那些“不听话”的值。比如Rc ArcRefCell它们各司其职,帮你搞定各种“值”的问题。

阅读全文

你有没有过这样的经历?写代码的时候,突然发现一个变量“消失”了或者一个值“不听话”地被改了?这种事几乎不会发生——主要原因是Rust把“变量与值”的关系管得死死的。但说实话,Rust的这套机制,有时候也让人又爱又恨,胡诌。。

变量和值,到底谁说了算?

提到这个... 在Rust中,变量和值的关系就像是一场“所有权”的争夺战。变量是值的“主人”,而值是变量的“财产”。一旦你把值的所有权给了别人,你就再也不能碰它了。这听起来很“霸道”,但确实有效。

66个让你对Rust又爱又恨的场景之一:变量与值

比如:

let x = 5;
let y = x; // x的所有权被“移动”给了y
println!; // ❌ 编译错误!x已经“死”了

栓Q! 是不是很绝?你刚想用x,后来啊它已经“不属于你”了。这就是Rust的“所有权”机制,它在编译阶段就帮你把内存平安问题扼杀在摇篮里。但说实话,这种“霸道”有时候也让人抓狂。

栈上值 vs 堆上值:谁更“听话”?

在Rust中,值可以存在两个地方:栈上和堆上。栈上值是“临时工”,用完就走;堆上值是“长期住户”,得自己动手释放,太坑了。。

栈上值, 比如:

let x = 5;
let y = x; // x的值被复制了不是“移动”

堆上值,比如:

let s = String::from;
let s2 = s; // s的所有权被“移动”了s就不能用了

是不是觉得有点“双标”?栈上值可以随便复制,堆上值却要“断舍离”?这就是Rust的“所有权”规则,它不允许你“脚踏两船”,坦白讲...。

智能指针:Rust的“保镖”

切中要害。 在Rust中, 智能指针就像是一群“保镖”,帮你管理那些“不听话”的值。比如Rc ArcRefCell它们各司其职,帮你搞定各种“值”的问题。

阅读全文