rust學習筆記(二)變量和類型

變量聲明 let v1 :i32 = 10; rust官方說這有諸多優勢,實際上是方便編譯器開發程序員。。c++

let 定義常量。可變常量須要加上mut。程序員

let能夠對變量重複定義成任意類型數組

let x = 1

let x = true

 

前面的語句爲啥沒有定義類型,這個功能就像c++的auto同樣,自動推導了類型。安全

 

顯示的定義別名app

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

 

靜態變量spa

  靜態變量它的聲明週期爲整個程序運行期間線程

定義須要注意指針

  1. 必須立刻初始化
  2. 初始化時必須編譯器認爲返回常量
  3. 容許加上mut可是必須使用unsafe

 

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

  

const定義常量: const G2 :i32 =0;orm

 

 經常使用的數據類型和別的語言沒啥大的差異

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>,  
}
相關文章
相關標籤/搜索