bool
1 | fn main() { |
char
1 | unicode |
整数类型
i8 u8, i16 u16 … i128, u128, isize, usize
1 | let var1 : i32 = 32; // 十进制表示 |
(pointer size)isize和usize占用字节数和32位或者64位系统有关系
浮点类型
1 | let f1 = 123.0f64; // type f64 |
指针类型
Box
&T 指向类型T的借用指针,也称为引用,无权释放内存,无权写数据
&mut T 指向类型T的mut型借用指针, 无权释放指针,有权写数据
*const T 指向类型T的只读裸指针,没有生命周期信息,无权写数据
*mut T 指向类型T的可读写裸指针,没有生命周期信息,有权写数据
智能指针
当做指针使用的类型
Rc
Arc
Cow<’a, T> Clone-on-write,写时复制指针。可能是借用指针,也可能是具有所有权的指针
类型转换
fn main() {
let var1 : i8 = 41;
let var2 : i16 = var1; //编译报错,i8类型的变量无法向i16类型的变量赋值
}
fn main() {
let var1 : i8 = 41;
let var2 : i16 = var1 as i16;
}
fn main() {
let i = 42;
// 先转为 *const i32,再转为 *mut i32
let p = &i as *const i32 as *mut i32;
println!("{:p}", p);
}
e as u 转换
Integer or Float -> Integer or Float
c-like enum -> Integer
bool or char -> Integer
u8 -> char
*T -> *V where V: Sized *
*T where T: Sized -> Numeric type
Integer type -> *V where V: Sized
&[T; n] -> *const T
Function pointer -> *V where V: Sized
Function pointer -> Integer
更复杂的类型转换,使用标准款的From Into等trait