文章目录
- 1. 目的
- 2. 不可变变量 (immutable variable)
- 2.1 含义
- 2.2 代码实例
- 3. 可变变量 (mutable variable)
- 3.1 含义
- 3.2 代码实例
- 4. 总结
1. 目的
学习 rust 语言中变量的定义方式, 包括普通变量(immutable)、可变变量(mutable)。
本篇博客不涉及引用类型。
2. 不可变变量 (immutable variable)
2.1 含义
rust 语言中定义的变量, 默认是 immutable 类型。啥意思呢?
let a = 1;
let b:i32 = 42;
这样定义的都是 immutable 变量。immutable 指的是取值不能改变。其实可以理解为 C/C++ 中的 const 修饰。 意味着只能在定义时赋值, 定义之外的地方不能修改值,修改就会导致编译报错。
也就是说, 在 rust 语言中, 如下两种定义变量的方式,默认带有 const 属性:
let 变量名 = 值;
相当于 C/C++ 的const auto 变量名 = 值;
let 变量名:类型 = 值;
相当于 C/C++ 的const 类型 变量名 = 值;
2.2 代码实例
d1.rs:
fn main() {let a = 1;println!("a {}", a);a = 2;println!("a {}", a);
}
编译运行,的确看到编译报错
zz@Legion-R7000P% rustc d1.rs
error[E0384]: cannot assign twice to immutable variable `a`--> d1.rs:4:5|
2 | let a = 1;| -| || first assignment to `a`| help: consider making this binding mutable: `mut a`
3 | println!("a {}", a);
4 | a = 2;| ^^^^^ cannot assign twice to immutable variableerror: aborting due to previous errorFor more information about this error, try `rustc --explain E0384`.
3. 可变变量 (mutable variable)
3.1 含义
所谓可变变量, 就是和前面提到的不可变变量相相反的一种情况: 定义时赋值, 然后定义之外的语句中可以修改值(不过数据类型不能改变)。
具体到代码层面, rust 语言提供了关键字 mut
. 有两种用法:
let mut 变量名 = 值;
相当于 C/C++ 的auto var = value;
let mut 变量名:类型 = 值;
相当于 C/C++ 的T var = value;
3.2 代码实例
d2.rs
fn main() {let mut a = 1;println!("a {}", a);a = 2;println!("a {}", a);
}
编译运行:
zz@Legion-R7000P% rustc d2.rs
zz@Legion-R7000P% ./d2
a 1
a 2
4. 总结
Rust 的变量定义, 不考虑引用类型的情况下,其实也不复杂,只有这4种情况。对照 C/C++ 写法, 很容易理解。 只不过需要明确的是, rust 变量默认是 immutable 的,相当于 const 的。受到这种影响的话, 其实写 C/C++ 时,也可以每次都加上 const, 避免不必要的修改,在编译器就可以捕获问题。
rust 语法 | c/c++ 语法 |
---|---|
let 变量名 = 值; | const auto 变量名 = 值; |
let 变量名:类型 = 值; | const 类型 变量名 = 值; |
let mut 变量名 = 值; | auto var = value; |
let mut 变量名:类型 = 值; | T var = value; |