Skip to content

rust 类型系统

rust 分为标量类型和复合类型

标量类型

标量类型就是单个值类型的统称,共有四种

  1. 整数,和 c 语言类似,默认是 i32 类型。共有 8,16,32,64,128 五种长度,并且还分有符号和无符号两种,还有一个字节字面量,表示方式为 b'X',b 后面加上单引号和一个 ASCII 字符,用 u8 类型来表示
  2. 浮点数,和 c 语言类似,默认是 f64,遵循 IEEE754 标准
  3. 布尔类型,同 c 语言,占用一个字节,rust 的布尔值可以使用 as 操作符转换为数值类型,false 对应 0,true 对应 1。但数值类型不允许转换为 bool 值。
  4. 字符类型,这是 rust 特有的一个类型,他占用 4 字节,表示的是一个 Unicode 标量

数值类型之间默认不会隐式转换,如果需要转换数值类型,可手动使用 as 进行转换,并且 as 也主要用于标量类型的数值转换。例如 3_i32 as u8 表示将 i32 类型的截断为 u8 类型。

TIP

整数类型的 128 位长度似乎是 20 年以后拓展出来的,因为我看的书并没有记录这个类型,但电子版存在这类型。

WARNING

字符类型表示的 Unicode 字符尚且存疑,因为不知道和 utf-8 等编码的关系

复合类型

复合类型就是可以把多个值组合到一起的值,rust 有两种基本的复合类型

  1. 元组,和 Python 元组类似
  2. 数组,类似类型收紧后的元组,所有的元素都只能保持同一个类型

其他语言必要类型

除了上面讲到的类型,还有一些定义在核心库中的类型,比如

  1. Slice,即切片类型
  2. str,即字符串切片类型
  3. reference,即引用类型
  4. pointer,即裸指针类型
  5. fn,即函数指针类型
  6. ……还有一些不赘述了