rust变量遮蔽(shadowing)

发布时间 2023-03-22 21:13:33作者: wenli7363

前言

首先要理解rust对变量的分配,rust创建一个变量之后,分配一个内存空间,变量名是对这一个内存空间的命名。

一般默认情况下,变量是不可变的,因为rust为了安全,对内存的操作是很小心的。如果想要让变量可变,需要声明mut

// 此时是对同一地址的改变
let mut x = 5;
x =6

// 此时是两个不同内存地址, 只是对不同地址,使用同一个名字命名。
// 此时第一个x被shadowing了
let x = 5;
let x = 6;

这和 mut 变量的使用是不同的,第二个 let 生成了完全不同的新变量,两个变量只是恰好拥有同样的名称,涉及一次内存对象的再分配 ,而 mut 声明的变量,可以修改同一个内存地址上的值,并不会发生内存对象的再分配,性能要更好。