rust提供了幾種機制來實現基本型別和使用者自定義型別的轉換和定義。
rust中沒有提供基本型別之間隱式地型別的轉換。
但是,我們可以通過as
關鍵字來進行顯示型別的轉換。
在rust中,數字型別的轉換和c語言中的轉換一樣,除了c語言中的未定義的行為。整數型別之間的所有轉換情況都已經在rust中定義好了。
/
/ 禁止型別轉中的型別溢位警告
#![allow(overflowing_literals)]
fn main()
-> {} -> {}"
, decimal, integer, character);/
/ 有符號數轉換為無符號數
// 在沒有發生型別溢位時,數字是原樣轉換
// 如果有型別溢位或者符號,則按照c的規則處理
println!
("1000 as a u8 is : {}"
,1000 as u16)
; println!
("-1 as a u8 is : {}",(
-1i8) as u8)
; println!
("128 as a i16 is : {}"
,128 as i16)
; println!
("128 as a i8 is : {}"
,128 as i8)
; println!
("1000 as a u8 is : {}"
,1000 as u8)
; println!
("232 as a i8 is : {}"
,232 as i8)
;}
數值型字面量通過把型別名稱以後綴的形式新增到變數名中來實現型別的註解。例如,為了指出字面量42
應該有的型別i32
,我們應該寫作42i32
。
沒有型別字尾的數字字面量的型別依賴於它後續怎麼被使用的。
如果沒有限制存在,編譯器將會把整數的型別設定為i32
,浮點數的型別設定為f64
。
fn main()
", std:
:mem:
:size_of_val
(&x));
println!
("size of `y` in bytes: {}"
, std:
:mem:
:size_of_val
(&y));
println!
("size of `z` in bytes: {}"
, std:
:mem:
:size_of_val
(&z));
println!
("size of `i` in bytes: {}"
, std:
:mem:
:size_of_val
(&i));
println!
("size of `f` in bytes: {}"
, std:
:mem:
:size_of_val
(&f));
}
型別引擎推斷非常智慧型。該引擎所做的遠比在初始化時檢查值表示式的型別所做的多。為了推斷它的型別,該引擎會檢查在這之後該變數是如何使用的。
fn main()
", vec)
;}
可以使用type
關鍵字來給已存在的型別乙個新的名稱。
型別的名稱必須是大駝峰的形式,否則編譯器會發出告警。
這個規則的例外是原始型別:usize
、f32
。
type nanosecond
= u64;
type inch
= u64;
#[allow(non_camel_case_types)]
type u64_t = u64;
fn main()
nanoseconds + {} inches = {} unit ?"
, nanoseconds,
inches,
nanoseconds + inches );
}
rust中的型別轉換
tryfrom與tryinto 字串的to與from 基本型別可以通過顯示型別轉換機制 as 來實現相互之間的轉換。rust通過使用trait來處理定製型別 enum struct 之間的型別轉換。通用的型別轉換一般使用的trait為from和to。然而,對於常見的型別轉換場景,有更多具體的trai...
rust中的基礎資料型別
復合型別 rust中的型別注釋 有符號整數主要包括i8 i16 i32 i64 i128和isize 指標大小 無符號整數主要包括u8 u16 u32 u64 u64 u128和usize 指標大小 浮點型資料主要包括f32 f64。字元型資料char,unicode標量值,比如 a b 每乙個字元...
丅rust是什麼意思 Rust 中的型別轉換
1.as 運算子 as 運算子有點像 c 中的強制型別轉換,區別在於,它只能用於原始型別 i32 i64 f32 f64 u8 u32 char 等型別 並且它是安全的。例在 rust 中,不同的數值型別是不能進行隱式轉換的,比如 let b i64 1i32 會出現編譯錯誤,提示無法進行型別轉換。...