rust学习笔记(二)变量和类型

变量声明 let v1 :i32 = 10; rust官方说这有诸多优点,其实是方便编译器开发程序员。。

let 定义常量。可变常量需要加上mut。

let可以对变量重复定义成任意类型

let x = 1

let x = true

 

前面的语句为啥没有定义类型,这个功能就像c++的auto一样,自动推导了类型。

 

显示的定义别名

    type tInt = u32;
    let x2 :tInt = 20;

 

静态变量

  静态变量它的声明周期为整个程序运行期间

定义需要注意

  1. 必须马上初始化
  2. 初始化时必须编译器认为返回常量
  3. 允许加上mut但是必须使用unsafe

 

static AAA:i32 = 0; println!("{:?}", AAA); static mut AAA2 :i32 = 1; unsafe{ AAA2 = 21; println!("{:?}", AAA2); }

  

const定义常量: const G2 :i32 =0;

 

 常用的数据类型和别的语言没啥大的差别

bool

char 不是1个字节是4个字节。需要使用1个字节可以使用u8数组

i8 u8 i16 u16 i32 u32 i64 u64 i128 u128 isize usize

整数溢出,rust提出了解决方案

  • checked_* 返回None
  • saturating_* 返回最大值
  • wrapping_* 返回溢出的截断

f32 f64

浮点数可能返回特别的值需要注意了啊

enum FpCategory{

  Nan, 空

  Infinite, 无限大

  Zero,0

  Subnormal, 小数位超出位数收敛的情况

  Normal 正常

}

指针类型和智能指针这些以后再说

Box<T> 有所有权,无权释放内存

&T 无权释放内存,无权写

& mut T 无权释放内存,有权写

*const T 只读指针,无权写

*mut T有权写

 

Rec<T>共享所有权,线程不安全

Act<T>原子型引用指针,共享所有权,线程安全

Cow<a,T> 写时复制

类型转换不支持隐式的转换,这种新语言有优势,使用as,后续一般使用标准库转换。

 

复合类型

 tuple元组

   	let tup1 = (2131i32, "abc");
   	println!("{} {}", tup1.0, tup1.1);

 有点奇妙的是允许定义空元组   let ept:() = () 占用内存空间为0

struct 结构

1        struct Poinit{
2            x :i32,
3            y :i32,
4        }
5        let p = Poinit{x:1, y:2};

也有空结构  struct AA; struct AA2(); struct{};

type struct结构,没有名字的结构体

struct AA(i32,i32)

struct Age(i32);
let age2 = Age(1);
println!("{:?}", age2.0);

 

enum 主要用在匹配模式match一起使用

类型递归定义,不能包含自身。

类似c

type struct Node{
    void *data;
     struct Node *next;  
}


struct Rex{
    data:i32,
    next:Box<Rex>,  
}

 

上一篇:通过欧拉计划学Rust(第1~6题)


下一篇:164、哪些函数不能是虚函数?把你知道的都说一说