W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Rust 有用 const 關(guān)鍵字定義常量的方法:
const N: i32 = 5;
不像 let 綁定那樣,您必須標(biāo)注常量的類型。
常量活在程序的整個(gè)生命周期。更具體地說,在 Rust 語言里面常量沒有固定內(nèi)存地址。這是因?yàn)樗麄儠?huì)被有效的內(nèi)聯(lián)到每個(gè)使用地方。引用相同的常數(shù)并不一定保證引用同一個(gè)內(nèi)存地址也是因?yàn)檫@個(gè)原因。
Rust 在靜態(tài)條目中提供一種“全局變量”。它們類似于常量,但靜態(tài)條目不內(nèi)聯(lián)使用。這意味著每個(gè)值只對(duì)應(yīng)一個(gè)實(shí)例, 并且在內(nèi)存中只有一個(gè)固定的地址。
這里有一個(gè)例子:
static N: i32 = 5;
不像 let 綁定那樣,您必須標(biāo)注一個(gè)靜態(tài)的類型。
靜態(tài)類型活在程序的整個(gè)生命周期,因此任何存儲(chǔ)在常量中的引用都有“靜態(tài)生命周期:
static NAME: &'static str = "Steve";
你可以用 mut 關(guān)鍵字介紹可變性:
static mut N: i32 = 5;
因?yàn)檫@是可變的,一個(gè)線程正在更新 N,而此時(shí)另一個(gè)正在讀入它,這樣會(huì)導(dǎo)致內(nèi)存不安全。這樣訪問和改變一個(gè)靜態(tài) mut 是不安全的,所以必須在一個(gè)unsafe 的塊里面完成:
unsafe {
N += 1;
println!("N: {}", N);
}
此外,任何存儲(chǔ)在 static 的類型都必須是 Sync。
常量和靜態(tài)常量都要求給他們一個(gè)值。并且他們可能只被賦予一個(gè)值,這個(gè)值是一個(gè)常數(shù)表達(dá)式。換句話說,在程序運(yùn)行時(shí),您不能使用函數(shù)調(diào)用的結(jié)果或任何其他類似的復(fù)雜操作。
幾乎總是如此,如果你能在兩者之間選擇,那么就選擇常量。人們幾乎不怎么希望內(nèi)存地址與你的常量關(guān)聯(lián)到一起,并且允許對(duì)常量進(jìn)行優(yōu)化,就像常量的使用范圍不僅在本程序塊也在下游程序塊一樣。
常量可以被認(rèn)為是在 C 語 言中用 # define 定義的:這里會(huì)有元數(shù)據(jù)開銷,但沒有運(yùn)行開銷?!霸?C 語言中,我應(yīng)該使用 # define 還是 static,“很大程度與這個(gè)問題是相同的,“在 Rus t語言中,我是應(yīng)該使用 const 還是 static”。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: