本文介绍了Rust编程语言中的数据类型,包括标量类型(整型、浮点型、布尔型、字符型)和复合类型(元组、数组)。文章详细讲解了每种类型的特点、使用方法以及相关的数值运算和内存管理机制,展示了Rust在类型安全和性能方面的优势。
让我们来谈谈 Rust 中的数据类型。在我之前的文章中,我讨论了 Rust 中的变量、遮蔽和可变性。
Rust 是一种系统编程语言,其设计考虑了性能、安全性和可靠性。支持这些目标的基本概念之一是 数据类型 。Rust 中的每个值都有一个特定的 数据类型 ,这有助于编译器理解该值的行为方式。在本文中,让我们深入了解 Rust 中的数据类型。我们将学习以下 Rust 中的数据类型,并了解它们在底层是如何工作的:
Rust 是一种 静态类型 的语言。这意味着每个变量的类型都必须在 编译时 知道,从而可以及早发现错误并提高内存管理效率。
通常,Rust 足够聪明,可以根据上下文 推断 类型:
let x = 5; // 默认推断为 i32
但是,当存在歧义时,你必须提供 类型注解 :
let guess: u32 = "42".parse().expect("Not a number!");
Rust 的优点在于它会通知你代码中的错误,这对安全性至关重要。
标量类型表示 单个值 。Rust 包括四种主要的标量类型:
整数是不带小数点的整数。它们可以是 有符号 的 ( i
) 或 无符号 的 ( u
),并且具有各种大小:
Rust 防止 溢出 (例如,将 256 分配给 u8
):
256 → 0
)。为了显式处理溢出,Rust 提供了如下方法:
wrapping_add
checked_add
overflowing_add
saturating_add
Rust 支持:
f32
(32 位)f64
(64 位,默认)例子:
let x = 2.0; // f64
let y: f32 = 3.0;
Rust 中的 bool
类型表示 true
或 false
值。
let t = true;
let f: bool = false;
主要用于像 if
表达式这样的控制流中。
Rust 的 char
类型表示单个 Unicode 标量值,使用 单引号 :
let c = 'z';
let z: char = 'ℤ';
let emoji = '😻';
结果
4. 数值运算
在 Rust 中,所有数字类型——无论是整数(i32
、u8
等)还是浮点数(f32
、f64
)——都支持 基本数学运算 ,这在大多数编程语言中都很常见。 这些操作包括:
+
)-
)*
)/
)%
)让我们通过示例来了解每一个。
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 中数组的大小是 固定的 ——一旦创建,就无法添加或删除元素。
在以下情况下,Rust 数组很有用:
例如:
fn main() {
let months = ["January", "February", "March", "April", "May", "June", "July",\
"August", "September", "October", "November", "December"];
println!("{:?}", months);
}
- 原文链接: medium.com/@estheraladio...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!