[Rust] 變量與類型

變量

  1. Rust的變量必須先聲明后使用,使用 let 開始聲明,默認是不可變的,如果要聲明可變需要 let mut
  2. Rust只允許 局部變量/全局變量 實現類型推導,函數簽名是不允許的
  3. 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ū)分,分別為f32f64

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)化。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容