fffg

目录

Rust 的基本类型

· 3 分钟
#Rust

Rust 的基本类型

Rust 的基本类型很简单,尤其是对英文不好的人来说,你根本不用去记 tiny,short 等差不多的单词究竟哪个更小,你只需要认识阿拉伯数字就够了。

Rust 的数据类型可以分成两类:基础类型和复合类型。

基础类型

基础类型包含着一眼就能看懂的类型,这些类型是偏底层的,原子的,也就是说你不能再把基础类型细分。

数值类型:

  • 有符号整数:i8, i16, i32, i64, i128, isize
  • 无符号整数:u8, u16, u32, u64, u128, usize
  • 浮点数:f32(单精度), f64(双精度)
  • bool 类型:false 和 true
  • 字符类型: char,表示单个 Unicode 字符,占用 4 字节
  • 字符串切片(后续会讲到为什么叫这个名字): &str

整数类型

哇,好简单的类型啊,我们只需要知道 i 代表有负值,u 代表无负值,就已经掌握了基础了。

i32 代表 有负值的 32 位整数,使用 1 位记录正负,剩余的位记录具体数值,i32 就能表示 231- 2^{31} ~ 231 2^{31} 范围的数值,u32 则能表示 0 ~ 232 2^{32} 的数值,真是言简意赅!

isize 并不是一个固定的值,当代码运行在 32 位系统上时,isize == i32, 当代码运行在 64 位系统时, isize == i64,usize 同理。

size

设计它们的主要理由如下:

  1. 精确表示内存大小和偏移

    内存地址、数组索引、指针偏移天然与平台相关。一个 64 位系统的内存空间远超 32 位,需要用 64 位整数才能安全表示。

    对数组进行索引时,Rust 要求使用 usize —— 这保证了索引值不会超出内存可寻址范围。

  2. 性能优势

    CPU 对指针宽度的整数操作通常最快。

    使用 usize 进行数组索引或偏移计算,直接对应机器指令,避免隐式类型转换。

  3. 与 C/C++ FFI 互操作

    C 语言中:size_t(无符号)对应 usize,ptrdiff_t(有符号)对应 isize。

    Rust 通过直接使用这些类型,可以零成本调用 C 库,无需反复转换。

  4. 防止平台相关的溢出错误

    如果统一用 u32 表示长度,在 64 位系统上可能不够用(例如一个超过 4GB 的文件映射到内存)。

    如果统一用 u64,在 32 位系统上会对每个索引都做 64 位运算,降低性能,且浪费寄存器。

    isize 和 usize 让代码既能适应大内存平台,又能在小平台上保持高效。

0思考准则

初学者可能会迷惑到底要使用哪个大小,Rust 整形默认会使用 i32,所以不清楚的时候就使用它吧。

系列:Rust 从入门到入门(2/2)