變量聲明 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
靜態變量它的聲明週期爲整個程序運行期間線程
定義須要注意指針
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提出瞭解決方案
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>, }