跳到主要内容

数据类型

在 Rust 中,数据类型可以分为两类:基本数据类型(Primitive Types)和复合数据类型(Compound Types)。

提示
  • Rust 是静态编译语言,在编译时必须知道所有变量的类型。
    • 基于使用的值,编译器通常能推断出类型。
    • 但如果可能的类型比较多(例如把 String 转整数的 parse 方法),就必须添加类型的标注,否则编译会报错

基本数据类型(Primitive Types):

整数类型(Integer Types)

  • i8i16i32i64i128:有符号整数类型,分别表示 8、16、32、64 和 128 位的有符号整数。
  • u8u16u32u64u128:无符号整数类型,分别表示 8、16、32、64 和 128 位的无符号整数。
  • isizeusize:分别表示有符号和无符号整数,其大小取决于运行平台的位数。
提示
  • 有符号范围:
    • $2^n - 1$ 到 $2^n-1 -1$
  • 无符号范围:
    • 0到 $2^n - 1$
提示

整数溢出 -例如:U8 的范围是 0-255,如果你把一个 U8 变量的值设次256,那么:

  • 调试模式下编译:Rust 会检查整数溢出,如果发生溢出,程序在运行时就会 panic -发布模式下(-release)编译:Rust 不会检查可能导致 panic 的整数溢出
    • 如果溢出发生:Rust 会执行“环绕”操作:
      • 256变成O,257变成1.
    • 但程序不会 panic

浮点数类型(Floating-Point Types)

  • Rust 有两种基础的浮点类型,也就是含有小数部分的类型
    • f32,32位,单精度
    • f64,64位,双精度
  • Rust的浮点类型使用了 IEEE-754 标准来表述
  • f64 是默认类型,因为在现代 CPU 上f64 和 f32的速度差不多,而且精度更高。

布尔类型(Boolean Type)

  • bool:表示布尔值,只能是 truefalse。一个字节大小。

字符类型(Character Type)

  • char:表示 Unicode 字符,占 4 个字节。
提示
  • Rust 中的 char 是一个 32 位的 Unicode 标量,能够表示所有 Unicode 字符。
  • JavaScript 没有原生的 char 类型,字符实际上是 UTF-16 编码的字符串。单个字符可能占用 2 或 4 字节。

空类型(The Unit Type)

  • ():也称为 unit 类型,表示空元组。

复合数据类型(Compound Types):

  1. 数组类型(Array Type)

    • [T; N]:表示包含 N 个元素、每个元素类型为 T 的数组。
  2. 元组类型(Tuple Type)

    • (T1, T2, ..., Tn):表示一个由多个不同类型的值组成的元组。
  3. 切片类型(Slice Type)

    • [T]:表示一个动态大小的数据序列切片,通常用于引用数组的一部分。
  4. 引用类型(Reference Type)

    • &T:表示对值的借用(引用),允许在不传递所有权的情况下访问值。
    • &mut T:可变引用类型,允许通过引用修改值。
  5. 指针类型(Pointer Type)

    • *const T:不可变原始指针类型。
    • *mut T:可变原始指针类型。

以上就是 Rust 中常见的数据类型,每种类型都有其特定的用途和限制。对于更复杂的数据结构,Rust 还提供了诸如枚举、结构体和 trait 等机制来支持。

FAQ?