Rust 拥有强大且严格的类型系统,是其安全性和性能的基础之一。本文将带你全面了解 Rust 中的各种类型,涵盖从基础标量类型到复杂自定义类型、引用、集合、智能指针等。
一、标量类型(Scalar Types)
标量类型用于表示一个单独的值,是 Rust 中最基本的数据类型:
类型 | 描述 | 示例 |
---|
i8 ~ i128, isize | 有符号整数类型 | let x: i32 = -10; |
u8 ~ u128, usize | 无符号整数类型 | let y: u8 = 255; |
f32, f64 | 浮点数(32/64 位) | let pi: f64 = 3.14; |
char | Unicode 字符(4 字节) | let c: char = '💡'; |
bool | 布尔类型(true/false) | let b: bool = true; |
二、复合类型(Compound Types)
复合类型用于将多个值组合在一起。
类型 | 描述 | 示例 |
---|
元组 () | 固定长度,可以包含不同类型的值 | let t: (i32, f64, char) = (1, 2.0, 'c'); |
数组 [] | 固定长度、元素类型必须相同 | let arr: [i32; 3] = [1, 2, 3]; |
切片 &[T] | 动态长度,引用数组的一部分 | let slice: &[i32] = &arr[0..2]; |
三、所有权与智能指针
Rust 通过所有权机制和智能指针实现内存安全。
类型 | 描述 |
---|
Box<T> | 在堆上分配的值的所有权 |
Rc<T> | 引用计数(单线程) |
Arc<T> | 原子引用计数(线程安全) |
RefCell<T> | 运行时可变性(单线程) |
Cell<T> | 拷贝类型的内部可变性 |
&T, &mut T | 不可变与可变引用 |
四、字符串与文本
Rust 中的字符串分为堆分配和切片两类:
类型 | 描述 |
---|
String | 可变的堆分配字符串 |
&str | 字符串切片(通常是字面量) |
五、集合类型(标准库)
Rust 提供丰富的数据结构,用于集合和映射:
类型 | 描述 | 所属模块 |
---|
Vec<T> | 动态数组 | std::vec |
HashMap<K, V> | 哈希映射表 | std::collections |
HashSet<T> | 无重复集合 | std::collections |
BTreeMap<K, V> | 有序映射表 | std::collections |
BTreeSet<T> | 有序集合 | std::collections |
六、自定义类型
Rust 允许开发者自定义复杂的数据结构和类型:
struct Point { x: i32, y: i32 }
enum Option<T> {
Some(T),
None,
}
type Kilometers = i32; // 类型别名
类型 | 描述 |
---|
struct | 自定义结构体 |
enum | 枚举类型 |
union | 联合体,多个字段共用内存 |
type | 类型别名 |
七、特殊类型
类型 | 描述 |
---|
() | 单元类型,表示无返回值 |
! | never 类型,表示永不返回 |
PhantomData<T> | 用于标记泛型参数未实际使用 |
八、Trait 与泛型
Trait 和泛型为 Rust 提供强大的抽象能力:
fn print_info<T: std::fmt::Debug>(val: T) {
println!("{:?}", val);
}
类型 | 描述 |
---|
impl Trait | 用于简化 trait 返回类型 |
<T: Trait> | 泛型约束 |