Rust中的数据类型

estheraladioche569 发布于 2025-07-20 阅读 1679

本文介绍了Rust编程语言中的数据类型,包括标量类型(整型、浮点型、布尔型、字符型)和复合类型(元组、数组)。文章详细讲解了每种类型的特点、使用方法以及相关的数值运算和内存管理机制,展示了Rust在类型安全和性能方面的优势。

让我们来谈谈 Rust 中的数据类型。在我之前的文章中,我讨论了 Rust 中的变量、遮蔽和可变性。

Rust 是一种系统编程语言,其设计考虑了性能、安全性和可靠性。支持这些目标的基本概念之一是 **数据类型 **。Rust 中的每个值都有一个特定的 **数据类型 **,这有助于编译器理解该值的行为方式。在本文中,让我们深入了解 Rust 中的数据类型。我们将学习以下 Rust 中的数据类型,并了解它们在底层是如何工作的:

  1. 标量
  2. 浮点类型
  3. 数值运算
  4. 布尔值
  5. 字符类型
  6. 复合类型

Rust 中的静态类型

Rust 是一种 **静态类型 ** 的语言。这意味着每个变量的类型都必须在 **编译时 ** 知道,从而可以及早发现错误并提高内存管理效率。

通常,Rust 足够聪明,可以根据上下文 **推断 ** 类型:

let x = 5; // 默认推断为 i32

但是,当存在歧义时,你必须提供 **类型注解 **:

let guess: u32 = "42".parse().expect("Not a number!");

Rust 的优点在于它会通知你代码中的错误,这对安全性至关重要。

标量类型

标量类型表示 **单个值 **。Rust 包括四种主要的标量类型:

1. 整型

整数是不带小数点的整数。它们可以是 **有符号 ** 的 ( i) 或 **无符号 ** 的 ( u),并且具有各种大小:

  • 有符号整数使用 **补码 ** 存储负数和正数。
  • 无符号整数仅存储正值。

整数溢出

Rust 防止 **溢出 ** (例如,将 256 分配给 u8):

  • 在 **调试模式 ** 下,你的程序会 **panic **。
  • 在 **发布模式 ** 下,Rust **环绕 ** (例如,256 → 0)。

为了显式处理溢出,Rust 提供了如下方法:

  • wrapping_add
  • checked_add
  • overflowing_add
  • saturating_add

2. 浮点数

Rust 支持:

  • f32 (32 位)
  • f64 (64 位,默认)

例子:

let x = 2.0; // f64
let y: f32 = 3.0;

3. 布尔值

Rust 中的 bool 类型表示 truefalse 值。

let t = true;
let f: bool = false;

主要用于像 if 表达式这样的控制流中。

Rust 的 char 类型表示单个 Unicode 标量值,使用 **单引号 **:

let c = 'z';
let z: char = 'ℤ';
let emoji = '?';

结果

**4. 数值运算 **

在 Rust 中,所有数字类型——无论是整数(i32u8 等)还是浮点数(f32f64)——都支持 **基本数学运算 **,这在大多数编程语言中都很常见。 这些操作包括:

  • **加法 ** ( +)
  • **减法 ** ( -)
  • **乘法 ** ( *)
  • **除法 ** ( /)
  • **余数 ** 或模数 ( %)

让我们通过示例来了解每一个。

fn main() {

    // addition
    let sum = 5 + 10;

    // subtraction
    let difference = 95.5 - 4.3;

    // multiplication
    let product = 4 * 30;

    // division
    let quotient = 56.7 / 32.2;
    let truncated = -5 / 3; // 结果为 -1

    // remainder
    let remainder = 43 % 5;

     println!("The sum is: {sum}");
      println!("The difference is: {difference}");
       println!("The product is: {product}");
       println!("The quotient is: {quotient}");
       println!("The value is: {truncated}");
        println!("The remainder is: {remainder}");
}

结果是

**复合类型 **

在 Rust 中,**元组 ** 是一种复合类型,允许你将 **多个值 ** 组合成一个单元。使元组特别有用的是,**元组中的每个元素都可以具有不同的类型 **,这与数组不同,数组中的所有元素必须是相同的类型。

什么是元组?

  • 元组写为 **逗号分隔的值列表 **,括在 **括号 ** () 中。
  • 一旦声明,元组就具有 **固定长度 **,创建后无法添加或删除元素。
  • 你可以在元组中 **混合类型 **,例如组合整数、浮点数和布尔值。

例如;

fn main() {

    let tup = (500, 6.4, 1);



    let (_x, _y, _z) = tup;

    println!("The value of y is: {_z}");

}

**数组类型 **

了解 Rust 中的数组

**数组 ** 是在 Rust 中存储值集合的另一种方式。数组是一种 **复合类型 **,类似于元组,但它们具有自己独特的特征。

数组的主要特征

  1. **相同类型 **:

    数组中的所有元素必须是 **相同的数据类型 **。

  2. **固定长度 **:

    Rust 中数组的大小是 **固定的 ** ——一旦创建,就无法添加或删除元素。

为什么要使用数组?

在以下情况下,Rust 数组很有用:

  • 你 **事先知道元素的数量 **。
  • 你希望将数据存储在 **栈 ** 上(为了性能和可预测性)。
  • 你不需要在创建后更改元素的数量。

例如:

fn main() {

  let months = ["January", "February", "March", "April", "May", "June", "July",\
              "August", "September", "October", "November", "December"];

    println!("{:?}", months);

}

  • 原文链接: medium.com/@estheraladio...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论