Rust学习笔记004-数据类型
前言
Rust是静态类型语言,在编译时就必须知道所有变量的类型。
两种方式确定类型:
- 根据值及使用方式,编译器通常可以推断出我们想要用的类型;
- 当多种类型均有可能时,必须增加类型注解;
如下代码,不加类型编译会报错。
|
|
标量类型
- 整型
- 浮点型
- 布尔类型
- 字符类型
整型
长度 | 有符号 | 无符号 |
---|---|---|
8bit | i8 | u8 |
16bit | i16 | u16 |
32bit | i32 | u32 |
64bit | i64 | u64 |
arch | isize | usize |
注意:
- isize 和 usize 类型依赖运行程序的计算机架构,64 位架构上它们是 64 位的, 32 位架构上它们是 32 位的。
- 除 byte 以外的所有数字字面值允许使用类型后缀,例如 57u8。
- 允许使用 _ 做为分隔符以方便读数,例如1_000。
- 默认数字类型为
i32
。
整型溢出
比方说有一个 u8 ,它可以存放从0-255的值。那么当你将其修改为 256 时会发生什么呢?
Rust的处理方式是根据运行模式来区分对待:
- debug模式:检查溢出,溢出时编译会panic报错;
- release模式:不检查溢出,256会变成1,257会变成2,以此类推;
浮点型
长度 | 类型 |
---|---|
32bit | f32 |
64bit | f64 |
默认类型为f64
;
布尔型
布尔类型使用bool
表示:
- true
- fasle
字符型
Rust 的char
类型代表了一个 Unicode 标量值(Unicode Scalar Value),这意味着它可以比 ASCII 表示更多内容。在 Rust 中,拼音字母(Accented letters),中文、日文、韩文等字符,emoji(绘文字)以及零长度的空白字符都是有效的 char 值。
Unicode 标量值包含从 U+0000 到 U+D7FF 和 U+E000 到 U+10FFFF 在内的值。
|
|
注意 char 由单引号指定,不同于字符串使用双引号。
复合类型
- 元组(tuple)
- 数组(array)
元组类型
使用包含在圆括号中的逗号分隔的值列表来创建一个元组。元组中的每一个位置都有一个类型,而且这些不同值的类型也不必是相同的。
元组声明:
- 元组的类型格式为
(类型1, 类型2, ...)
,中间使用,
逗号分隔; - 元组中的值位于圆括号内
,
逗号分隔的列表中;
|
|
如何取值:
- 模式解构
|
|
程序首先创建了一个元组并绑定到 tup 变量上。接着使用了 let 和一个模式将 tup 分成了三个不同的变量,x、y 和 z,这叫做解构(destructuring)。
- 索引
|
|
跟大多数编程语言一样,元组的第一个索引值是 0。
数组类型
另一个包含多个值的方式是 数组(array)。与元组不同,数组中的每个元素的类型必须相同。并且Rust 中的数组是固定长度的,一旦声明,它们的长度不能增长或缩小。
数组声明:
- 数组的类型格式为
[类型; 数组长度]
,注意中间使用;
分号分隔; - 数组中的值位于中括号内
,
逗号分隔的列表中;
|
|
这里创建了一个长度为4,类型为i32的数组。
访问元素 和其他编程语言类型,Rust数组使用索引下标访问元素,从0开始。
|
|
下标越界 当访问超过数组长度的下标时会怎样的呢?
|
|
运行结果:
|
|
可与看出,编译并没有产生任何错误,不过程序会出现一个运行时(runtime)错误并且不会成功退出。当尝试用索引访问一个元素时,Rust 会检查指定的索引是否小于数组的长度。如果索引超出了数组长度,Rust 会 panic。
- 原文作者:maratrix
- 原文链接:https://maratrix.cn/post/2020/02/05/004-rust-types-notes/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。