Rust 内建类型
你将学到: Rust 的基础类型(
i32、u64、f64、bool、char)、类型推导、显式类型标注,以及它们如何与 C/C++ 的原始类型进行对比。Rust 不允许隐式转换 —— 必须进行显式类型转换。
- Rust 具有类型推导功能,但也允许显式指定类型。
| 描述 | 类型 | 示例 |
|---|---|---|
| 有符号整数 | i8, i16, i32, i64, i128, isize | -1, 42, 1_00_000, 1_00_000i64 |
| 无符号整数 | u8, u16, u32, u64, u128, usize | 0, 42, 42u32, 42u64 |
| 浮点数 | f32, f64 | 0.0, 0.42 |
| Unicode 字符 | char | ‘a’, ‘$’ |
| 布尔值 | bool | true, false |
- Rust 允许在数字之间任意使用
_以提高可读性。
Rust 类型指定与赋值
- Rust 使用
let关键字为变量赋值。变量的类型可以可选地跟在:之后。
fn main() {
let x : i32 = 42;
// 这两个赋值在逻辑上是等价的
let y : u32 = 42;
let z = 42u32;
}
- 函数参数和返回值(如果有)必须显式指定类型。以下函数接收一个
u8参数并返回u32:
#![allow(unused)]
fn main() {
fn foo(x : u8) -> u32
{
return x as u32 * x as u32;
}
}
- 未使用的变量应以
_为前缀,以避免编译器警告。
Rust 类型推导
- Rust 可以根据上下文自动推导变量的类型。
- ▶ 在 Rust Playground 中尝试
fn secret_of_life_u32(x : u32) {
println!("u32 类型的 secret_of_life 是 {}", x);
}
fn secret_of_life_u8(x : u8) {
println!("u8 类型的 secret_of_life 是 {}", x);
}
fn main() {
let a = 42; // let 关键字赋值;a 的类型被推导为 u32
let b = 42; // let 关键字赋值;b 的推导类型为 u8
secret_of_life_u32(a);
secret_of_life_u8(b);
}
Rust 变量与可变性
- Rust 的变量默认是不可变 (Immutable) 的,除非显式使用
mut关键字标识。例如,除非将let a = 42改为let mut a = 42,否则以下代码将无法通过编译:
fn main() {
let a = 42; // 必须改为 let mut a = 42 才能允许下方的赋值语句
a = 43; // 除非进行上述修改,否则此行无法编译
}
- Rust 允许变量名重用(变量遮蔽 / Shadowing):
fn main() {
let a = 42;
{
let a = 43; // OK: 另一个同名变量,遮蔽了外层的 a
}
// a = 43; // 不允许直接修改不可变变量
let a = 43; // OK: 创建了全新的变量 a 进行了新赋值
}