保证一致性,保证安全.

17.Rust中的类型 - 图1

基本数据类型

字符串

17.Rust中的类型 - 图2

  1. 字面量
  2. 动态可增长字符串
  3. 从一段字符串截取的片段
  4. 字符串编码
  5. FFi中需要转换字符串到C或OS本地字符串
  6. 遵循特定格式的文件路径

指针类型

  1. 原始指针,mut T 和 const T 一般 用于 unsafe rust中 可以为空
  2. NonNull指针,他是Rust语言建议的*mut指针的代替指针.NonNull指针是非空指针,并且是遵循生命周期类型的协变规则.
  3. 函数指针 ,函数指针是指向代码的指针,而非数据,你可以使用它直接调用函数.

引用

  1. &T和&mut T 共享引用和独占引用
  2. 引用与指针的主要区别
  • 拥有生命周期
  • 引用不可能为空
  • 受借用检查器保护 不发发生悬垂指针问题.

元组

唯一的异构序列

  1. 不同长度的元组是不同的类型
  2. 单元类型的唯一实列等价于空元组
  3. 当元组只有一个元素的时候,要在元素末尾加逗号分隔.这是为了方便和括号操作符区分开来.

Never类型

代表的是不可能返回值的计算类型

  1. 类型理论中,叫做底类型,底类型不包含任何值,但它可以合一到任何其他类型.
  2. Never类型用!叹号表示

自定义复合类型

结构体

  1. 具名结构体
  2. 元组结构体
  3. 单元结构体
  1. struct Hello{//具名结构体
  2. name:String,
  3. age:u8,
  4. }
  5. struct Helo(i32,u8);//元组结构体
  6. struct Hlo;//单元结构体

当元组结构体只包含一个成员的时候,这种模式就叫NewType

  1. struct Score(u32);//NewType
  2. impl Score {
  3. fn pass(&self) -> bool {
  4. self.0 >= 60
  5. }
  6. }
  7. fn main() {
  8. let s = Score(5);
  9. assert_eq!(s.pass(), false)
  10. }

编译器重排

是为了内存对齐,优化.

内存对齐:

重排是为了优化内寸大小.

容器类型

cell

RefCell

基于 unsafecell 实现

泛型

单态化

特定类型

是指专门有特殊用途的类型

  1. phantomData 幻影类型 一般用于UnsafeRust的安全抽象
  2. Pin 固定类型 为了支持异步开发而特意引进,防止被引用的值发生移动的类型