从零开始的Rust生活:01-基本类型与基本运算符

Rust中的基本数据类型

Rust中的基本数据类型和大多数的语言一样,都可以简单的被分为整型、浮点型、布尔型等等,同时Rust还有一些专属于自身的一些很奇妙的类型,包括Option<T>,Box<T>等等。

通常Rust中的类型对应的符号为:

  • 有符号整型:isize,i8,i16,i32,i64,i128
  • 无符号整型:usize,u8,u16,u32,u64,u128
  • 浮点型:f32,f64
  • 布尔型:bool
  • unit类型:()
  • 引用:&T,&mut T
  • 裸指针:*mut T,*const T
  • !

这里值得一提的是,Rust中的!类型在多数情况下实际上代表了不会返回,他的功能包括在match()块中实现对各种条件返回类型的补全(因为Rust中对于match()块要求每个分支的返回类型必须相同,当某一个分支不会返回而是导致程序异常退出的时候则可以通过返回一个!来通过编译器检查)

另外对于Rust还有以下几种常用的类型:

  • Option<T>:Rust用于解决"空"的一个方案,一个Option<T>枚举量可以是一个Option<T>::Some(n)代表非空,也可以是一个Option<T>::None表示空
  • Box<T>:堆上分配的指针
  • Rc<T>,Arc<T>:智能指针(可以这么想)
  • RefCell<T>:更加神奇的指针(之后会讨论的)
  • 以及很多

可以说Rust为了保证其基本的安全可以说是费尽了心思,搞出了一大堆用于应对各种情况的类型,某种意义上这也是Rust难学的一个重要原因。

类型强制转换

类型强制转换可以说是几乎现役的所有程序语言必备的功能,Rust自然也不例外。
对于Rust其使用了关键字as用于类型转换。对于Rust来说强制类型转换同样需要各个类型之间是支持强制类型转换的,不然编译器报错警告。同时Rust对于从高类型向低类型转换的时候不会报错,最多一个warning了事,所以也不要指望编译器会帮你解决把一个i32转换到i8导致的溢出问题。

运算符

作为一款合格的程序语言,Rust自然也具有完备的运算符系统,考虑到运算符的数量实在是太多了(主要是懒),这里是官方的运算符列表,各位可以作为参考资料。


从零开始的Rust生活:01-基本类型与基本运算符
http://anyin233.github.io/2020/11/21/Rust-01/
Author
anyin233
Posted on
November 21, 2020
Licensed under