變量
- Rust的變量必須先聲明后使用,使用
let開始聲明,默認是不可變的,如果要聲明可變需要let mut - Rust只允許
局部變量/全局變量實現類型推導,函數簽名是不允許的 - Rust不允許使用未初始化的變量
類型
Rust是靜態(tài)強類型語言,靜態(tài)的意思是在運行程序前Rust知道所有變量的類型,強類型意思是Rust不會自動將一個變量的類型轉化成另一個類型。
內置類型
- 整形(Integer)
- 浮點型(Floating)
- 布爾型(Boolean)
- 字符型(Character)
- 數組(Array)
- 切片(Slice)
- 元組(Tuple)
- 函數(Function)
整數
Rust中整數分有符號/無符號整數,默認是 i32
| 整數類型 | 有符號 | 無符號 |
|---|---|---|
| 8 bits | i8 | u8 |
| 16 bits | i16 | u16 |
| 32 bits | i32 | u32 |
| 64 bits | i64 | u64 |
| 128 bits | i128 | u128 |
| Pointer size | isize | usize |
所謂有符號/無符號,指的是內存空間中的bit使用。如果一個變量是有符號類型,那么它的最高位的那一個bit就是“符號位”,表示該數為正值還是負值(高位是 0 表示正數,1 表示負數)。如果一個變量是無符號類型,那么它的最高位和其他位一樣,表示該數的大小。比如對于一個byte大?。? bits)的數據來說,如果存的是無符號數,那么它的表達范圍是0~255,如果存的是有符號數,那么它的表達范圍是-128~127。
數字類型的字面量表示方式:
let var1 : i32 = 32; // 十進制表示
let var2 : i32 = 0xFF; // 以0x開頭代表十六進制表示
let var3 : i32 = 0o55; // 以0o開頭代表八進制表示
let var4 : i32 = 0b1001; // 以0b開頭代表二進制表示
所有數字可以在任何地方添加下劃線,不影響語義,可以提高可讀性:
let var5 = 0x_1234_ABCD;
字面量后面可以跟后綴,可代表該數字的具體類型,從而省略掉顯示類型標記:
let var6 = 123usize; // usize類型
let var7 = 0x_ff_u8; // u8類型
let var8 = 32; // 不寫類型,默認為 i32 類型
浮點類型
按占據空間大小區(qū)分,分別為f32和f64
char
char: char類型的設計目的是描述任意一個unicode字符,因此它占據的內存空間不是1個字節(jié),而是4個字節(jié)。我們可以使用一個字母b在字符或者字符串前面,代表這個字面量存儲在u8類型數組中,這樣只占用1個字節(jié)
let x :u8 = 1;
let y :u8 = b'A';
let s :&[u8;5] = b"hello";
let r :&[u8;14] = br#"hello \n world"#;
數組
定義:
let arr: [i8, 3] = [1, 2, 3];
訪問:
arr[1] 返回2
元組
定義:
let t: (i32, char) = (2, 'x');
訪問:
t.1 返回 x
static
靜態(tài)變量用 static 聲明,用static聲明的變量的生命周期是整個程序,從啟動到退出。限制:
- 全局變量必須在聲明的時候馬上初始化
- 全局變量的初始化必須是編譯期可確定的常量,不能包括執(zhí)行期才能確定的表達式、語句和函數調用
- 帶有
mut修飾的全局變量,在使用的時候必須使用unsafe關鍵字
const
const 常量,一定不允許使用mut關鍵字修飾這個變量綁定。與 static 區(qū)別:編譯器并不一定會給const常量分配內存空間,在編譯過程中,它很可能會被內聯優(yōu)化。