..
Rust 学习笔记 | 类型综述
Rust 所有的类型梳理
基本类型(Primitive Types)或者叫标量类型(Scalar Types)
- 布尔类型,bool,Copy
- 字符类型,char,Copy
- 数值类型
- 整数类型,i8/i16/i32/i64/i128/isize,Copy
- 无符号整数类型,u8/u16/u32/u64/u128/usize,Copy
- 浮点数类型,f32/f64,Copy
复合类型(Compound Types)
- 元组类型,tuple。如果成员都是 Copy 的,那么该元组就是 Copy ;
- 数组类型,array。如果成员都是 Copy 的,那么该数组就是 Copy 的
- 结构体类型,struct。如果成员都是 Copy 的,那么该结构体就是 Copy 的
- 切片类型,slice,非 Copy
- 动态数组类型,Vec,非 Copy
枚举类型(Enumeration Types)
- 枚举类型,enum。如果所有变体都是 Copy 的,那么该枚举类型就是 Copy 的
- Option 类型,如果被包裹的类型就是 Copy 的,那么该 Option 就是 Copy 的
引用类型(Reference Types)
- 引用,&T,非 Copy
指针类型(Pointer Types)
- 裸指针,*const T/*mut T,非 Copy
- 函数指针,fn,非 Copy
字符串类型(String Types)
- 字符串切片,&str,非 Copy
- 字符串类型,String,非 Copy
Copy 检查
如何检查一个结构体是否是 Copy 的?
#[derive(Clone, Copy)]
struct MyStruct {
// 结构体的字段
a: i32,
}
fn is_copy<T: Copy>() {
// 不执行任何操作,仅用于检查编译是否通过
}
fn main() {
if std::panic::catch_unwind(|| {
is_copy::<MyStruct>();
})
.is_ok()
{
println!("MyStruct is Copy");
} else {
println!("MyStruct is not Copy");
}
}