rust中只有类型的概念,而没有类这个概念,在支持面向对象编程时,是应用复合数据类型来达到效果。当然这里暂时不涉及复合数据类型。
rust中基本数据类型(Primitive Types)可在标准库中找到。我大致分为两类:
一种是数值类型,比如数字、字符。
一种是指针类型,比如指针。
数值类型和指针类型都是值,只是指针所代表的值较为特殊,它的值指向一个地址。
数值类型
数字类型
数字类型就是各种范围大小的数字。因为rust是强类型,所以哪怕一个无符号整数,也分为了u8、u16、u32、u64、u128几种。而相应的有符号整数、小数(浮点数)也分为几部分。需要注意的是浮点数中存在的NAN不是小数的数和正负无穷大。
除了上述之外,最常见的是因机器不同而体现数字不同的isize,usize。这两个数所占的字节数因机器不同而不同,64位8字节,32位字节为4字节。
字符类型
rust中char类型是4个字节,这点要始终注意,它是unicode的标量值。
布尔类型
特殊类型
unit
代表()。这通常是一个作用域结束后的返回值。它只代表值,没有更多的意思。
never
一个实验性质的类型,它代表的是一个永远不返回的类型,或者是任一类型。
str
tuple
指针类型
pointer
指针,rust支持的指针分为两种:
- *const T
- *mut T
其中T为指针指向的具体类型。const、mut修饰的是指针指向的值是否可变。
reference
引用,在通常情况下,它被看作指针,但与之不同的是,它通常跟随着一个生命周期标注。通过&/&mut 可以直接取得一个共享引用/可变引用。要注意的是共享一定不可变,可变一定不共享。因为在共享和可变同时存在,明显会出现数据竞争的情况。
reference的主要方法来自trait的实现。
slice
切片,通常和引用类似。切片和引用的异同:
- 切片指向的是原类型的一部分。
- 引用指向的是原类型。
引用和切片都遵循借用法则,共享和可变不能同时存在,这其中包括可变引用和不可变切片之类的组合。在借用法则下这两种是等价的。
注意:切片通常是在容器中出现。
fn
函数指针类型,fn指向的是一个函数的指针,我们可以通过fn来指代函数。函数指针同样有类型,它通常由参数和返回值来决定,一个函数类型说明如下:
let x: fn(usize) -> uszie;