【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的类型系统设计强调安全性和性能:

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

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

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

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

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

相关推荐
民乐团扒谱机1 天前
【微实验】MATLAB 仿真实战:多普勒效应 —— 洒水车音乐的音调变化仿真
开发语言·matlab·多普勒效应·多普勒频移
寻星探路1 天前
【Python 全栈测开之路】Python 基础语法精讲(一):常量、变量与运算符
java·开发语言·c++·python·http·ai·c#
朔北之忘 Clancy1 天前
2020 年 6 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解
csbysj20201 天前
组合实体模式
开发语言
万物皆字节1 天前
Spring Cloud Gateway 启动流程源码分析
java·开发语言·spring boot
问水っ1 天前
Qt Creator快速入门 第三版 第16-7章 其他内容
开发语言·qt
C_心欲无痕1 天前
ts - 关于Object、object 和 {} 的解析与区别
开发语言·前端·javascript·typescript
claider1 天前
Vim User Manual 阅读笔记 User_03.txt move around
笔记·编辑器·vim
a程序小傲1 天前
得物Java面试被问:方法句柄(MethodHandle)与反射的性能对比和底层区别
java·开发语言·spring boot·后端·python·面试·职场和发展
saoys1 天前
Opencv 学习笔记:一文掌握四种经典图像滤波(均值 / 高斯 / 中值 / 双边)
笔记·opencv·学习