Rust基础
Rust基础
变量与可变性
在Rust中变量是默认不可变的,如果要定义一个可变变量必须使用mut修饰.
1 | let x=5; //x是不可变的变量 |
变量与常量的区别
- 常量不只是不可变,而是一直不可变.
- 你需要使用const而不是let声明一个常量,必须加上数据类型注解
1
const MAX_POINT:u32=12_000;
- 常量可以定义在任何作用域.
- 常量必须设定成一个常量表达式,既不是一个函数的结果,也不是其他只能在运行时计算出的结果.
Shadowing
同一个变量名可以多次定义,后一次定义会覆盖前一次的定义,如下所示
1 | let x:i32=5; |
备注: Shadowing不同与mut,Shadowing是定义一个新的变量.
数据类型
Rust中有两种数据类型子集:标量(Scalar),混合量(Compound);
标量(Scalar)
标量类型代表单个值.Rust有四种基本的标量类型:整型,浮点型,字符型,布尔型.
整数
长度 | 有符号 | 无符号 |
---|---|---|
8bit | i8 | u8 |
16bit | i16 | u16 |
32bit | i32 | u32 |
64bit | i64 | u64 |
128bit | i128 | u128 |
arch | isize | usize |
备注:
- 有符号的取值范围为 -2^(n-1) – 2^(n-1)-1;
- 无符号的取值范围为 0 – 2^n-1
- isize和usize的长度,取决于架构类型,如果是64位架构,那就是64bit,如果是32位架构,那就是32bit.
整数的字面量书写形式
字面量 | 示例 |
---|---|
十进制(Decimal) | 10_000 |
十六进制(Hex) | 0xff |
八进制(Octal) | 0o12 |
二进制(Binary) | 0b111_000 |
Byte(u8) | b’A’ |
整型溢出
当发生整型溢出时,Debug模式下Rust会检查并抛出错误信息,而在Release(–release)模式下,Rust不会检查,Rust执行二进制补码包装.例如u8类型,256变成0,257变成1.
浮点数
Rust支持单精度已经双精度的浮点类型分别为f32,f64,参考IEEE-754标准.
1 | let f1=3.0; // f1 data type is f64 |
备注:默认的浮点类型为f64,现代的cpu对于f64与f32的处理速度差不多,而f64进度更高.
算术运算
布尔类型(Boolean)
Rust中的布尔类型为bool,占用1个字节,可取值为false,true;
1 | let x=false; |
字符类型(Character)
Rust中的字符类型关键字为char,占用4个字节,存储Unicode标准值.
1 | let c='a'; |
混合量(Compound)
混合量表示可以含有多个值的数据类型.Rust支持两种基本的混合量:元组(Tuple),数组(Array)
元组(Tuple)
元组是由不同类型的多个值组成的一个混合量,元组具有固定的长度,一旦声明,无法增加或者减少.
1 | let tup=(1,2,3); |
数组(Array)
数组是由多个同类型的值组成的一个混合量,不同于元组,数组的每一个值的类型都是一样的,数组的长度是固定的.
1 | //定义数组 |
备注:Rust会对数组访问进行越界检查,越界访问会抛出异常(panic)
函数
函数由fn关键字,函数名,参数列表,返回类型,函数体组成;其中参数列表,返回类型可以省略;
语法如下
1 | //无返回值,无参数 |
函数体
函数体可以包含语句以及表达式(表达式只能在尾部作为返回值)
备注:语句与表达式:语句是执行一些动作但没有返回值的指令;表达式被计算有一个结果.
例如
1 | fn main(){ |
1 | fn main(){ |
注释
1 | // comment |
控制流
条件
if表达式
1 | let x=3; |
let语句中使用if表达式
1 | let x=4; |
备注:各个分支的返回必须是相同的.
循环
无限循环(loop)
loop关键字,循环执行一段指令,直到显示的停止;
1 | loop{ |
loop循环体是可以返回值
1 | let n=1; |
条件循环(while)
1 | let n=10; |
遍历(for)
1 | let a=[1,2,3]; |