【Rust】 2. 数据类型笔记

一、类型系统概述

Rust 是静态类型语言,所有变量类型在编译时就必须确定。

静态类型 vs 动态类型
特性 静态类型语言 动态类型语言
类型检查时机 编译时期 运行时期
性能 更好(无运行时类型检查开销) 较差(需要运行时类型检查)
类型声明 需要显式声明 不需要显式声明
例子 Java, C++, Rust Python, JavaScript

二、数据类型分类

  1. 标量类型(Scalar)

单个值类型

1.1 整型(Integer)

  • 有符号:i8, i16, i32, i64, i128, isize

  • 无符号:u8, u16, u32, u64, u128, usize

  • 默认类型:i32

字面量表示:

rust 复制代码
let decimal = 98_222;    // 十进制
let hex = 0xff;          // 十六进制
let octal = 0o77;        // 八进制
let binary = 0b1111_0000;// 二进制
let byte = b'A';         // 字节(u8)

整数溢出处理:

  • debug模式:panic

  • release模式:自动舍弃高位

  • 可用方法显式处理:wrapping_, checked_, overflowing_, saturating_

1.2 浮点型(Float)

  • f32:32位单精度

  • f64:64位双精度(默认类型)

注意: 浮点数是近似值,避免直接相等性比较

1.3 布尔型(Boolean)

  • 值:true/false

  • 大小:1字节

  • 用于逻辑运算和条件判断

1.4 字符型(Character)

  • 类型:char

  • 大小:4字节(Unicode标量值)

  • 单字节字符:使用u8类型和b前缀

1.5 序列(Range)

rust 复制代码
1..5    // 1到4(不包含5)
1..=5   // 1到5(包含5)
  1. 复合类型(Compound)

组合多个值为一个类型

2.1 元组(Tuple)

  • 固定长度

  • 可包含不同类型

  • 访问方式:模式匹配解构 或 数字索引

rust 复制代码
let tup = (500, 6.4, 1);
let (x, y, z) = tup;  // 解构
let five_hundred = tup.0;  // 索引访问

2.2 数组(Array)

  • 固定长度
  • 元素类型必须相同
  • 访问方式:下标索引 或 get()方法
rust 复制代码
let a = [1, 2, 3, 4];
let first = a[0];           // 索引访问
let first = a.get(0);       // 返回Option类型

2.3 结构体(Struct)

三种形式:

  • 具名结构体:struct Point { x: i32, y: i32 }

  • 元组结构体:struct Color(i32, i32, i32);

  • 单元结构体:struct Unit;

  1. 枚举(Enum)

表示"或"关系,可包含不同类型数据

rust 复制代码
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}
  1. 特殊类型
  • Never类型:!,表示不可能返回的值(目前不稳定)

三、类型选择原则

  1. 理解数据特性:值范围、是否需要小数、是否可变等

  2. 选择最小合适类型:节省内存,提高性能

  3. 平衡类型安全与灵活性

  4. 考虑数据可变性需求

  5. 利用复合类型组织复杂数据

  6. 进行充分测试验证

四、常见错误

  1. 类型转换需要显式声明
rust 复制代码
let var1: i8 = 1;
let var2: i32 = var1 as i32;  // 需要as关键字
  1. 复合数据类型不允许直接嵌套
rust 复制代码
// 错误示例
struct Node {
    data: i32,
    next: Node,  // 不允许直接嵌套
}

五、总结

Rust的类型系统设计强调安全性和性能:

  • 静态类型检查在编译期捕获错误

  • 丰富的标量和复合类型满足各种需求

  • 明确的类型转换规则防止隐式错误

  • 内存安全的设计避免常见编程错误

选择合适的数据类型需要综合考虑数据的特性、内存使用、性能需求和代码可维护性等因素。

相关推荐
不会学习?10 小时前
数据结构 第三轮
数据结构·经验分享·笔记·其他
炒毛豆10 小时前
vue3+antd实现华为云OBS文件拖拽上传详解
开发语言·前端·javascript
Pu_Nine_910 小时前
Axios 实例配置指南
前端·笔记·typescript·axios
THMAIL10 小时前
攻克 Java 分布式难题:并发模型优化与分布式事务处理实战指南
java·开发语言·分布式
完美世界的一天10 小时前
Golang 面试题「中级」
开发语言·后端·面试·golang
hit56实验室11 小时前
腾讯云的运维笔记——从yum的安装与更新源开始
运维·笔记·腾讯云
再睡一夏就好12 小时前
浅谈new与::operator new
笔记
Morpheon12 小时前
Intro to R Programming - Lesson 4 (Graphs)
开发语言·r语言
梅见十柒12 小时前
UNIX网络编程笔记:共享内存区和远程过程调用
linux·服务器·网络·笔记·tcp/ip·udp·unix
代码AI弗森12 小时前
使用 JavaScript 构建 RAG(检索增强生成)库:原理与实现
开发语言·javascript·ecmascript