欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Rust中不可變變量與const的區(qū)別詳解

 更新時間:2024年02月18日 10:25:50   作者:程序飼養(yǎng)員  
Rust作者認(rèn)為變量默認(rèn)應(yīng)該是immutable,即聲明后不能被改變的變量,這一點是讓跨語言學(xué)習(xí)者覺得很別扭,不過這一點小的改變帶來了諸多好處,本節(jié)我們來學(xué)習(xí)Rust中不可變變量與const的區(qū)別,需要的朋友可以參考下

什么是變量?

如果你初次學(xué)習(xí)編程語言,變量會是一個比較抽象的概念。
以Rust語言來說,聲明一個變量就是申請一塊內(nèi)存,內(nèi)存的大小由變量的類型決定,類型我們會在后面的課程介紹。

let a = "abc";

我們使用let關(guān)鍵字聲明一個變量a,同時把abc存放到變量里面。
此時,我們可以說變量中存儲了abc,也可以說這塊內(nèi)存中存儲了abc。

具體怎么來理解呢?

內(nèi)存就像這個雞蛋收納盒, 我們?yōu)槊恳粋€蛋格編碼(這個編碼就相當(dāng)于內(nèi)存地址)。聲明一個變量a,相當(dāng)于找到一個空格把它叫做a,同時把雞蛋放到這個空格里面。我們可以把任何一個空格叫做a,它不過是為蛋格的編碼起了一個別名。

下面這個圖就描述了我們這段代碼實際做的事情,把0xBA0F0140到0xBA0F0152這段內(nèi)存叫做變量a,并且存儲了字符串a(chǎn)bc。

let a = "abc";
a = "efg"; // X 此處報錯

我們把在聲明變量a時賦值了“abc”,就不能再修改這個變量了。這是Rust的一個語言特性,如果我們后續(xù)可能會修改變量a的內(nèi)容,就需要在聲明時添加上mut關(guān)鍵字,如下:

let mut a = "abc";
a = "efg"; // √

Rust引入mut關(guān)鍵字的有何優(yōu)勢?

  1. 不可變變量可以防止意外修改,從而避免數(shù)據(jù)競爭和內(nèi)存錯誤。例如,如果一個變量是不可變的,則無法在多個線程中同時修改它,從而避免數(shù)據(jù)競爭。
  2. 不可變變量可以使代碼更加簡潔易讀。例如,如果一個變量是不可變的,則可以明確地表明該變量的值在代碼塊內(nèi)不會改變,從而使代碼的邏輯更加清晰。
  3. 不可變變量可以幫助編譯器進(jìn)行優(yōu)化。例如,如果一個變量是不可變的,則編譯器可以知道該變量的值在代碼塊內(nèi)不會改變,從而可以進(jìn)行一些優(yōu)化,例如消除不必要的計算。
  4. 不可變變量是函數(shù)式編程的重要概念。函數(shù)式編程鼓勵使用不可變變量和純函數(shù),從而使代碼更加易于理解和測試。

Rust中不可變變量與const有何區(qū)別?

const MAX_SIZE: usize = 100;

const 關(guān)鍵字用于定義常量。常量與不可變變量類似,但常量在編譯期就確定了值,不能在運(yùn)行時改變。不可變變量直到運(yùn)行期來能確定下來。

常量具有以下優(yōu)點:

  • 性能: 常量可以幫助編譯器進(jìn)行優(yōu)化。
  • 可讀性: 常量可以使代碼更加易讀。

如何銷毀一個變量?

聲明變量對應(yīng)著申請內(nèi)存,銷毀變量也就是釋放對應(yīng)的內(nèi)存。

Rust中釋放內(nèi)存有非常復(fù)雜的機(jī)制,主要分為兩類:

  1. 釋放棧內(nèi)存,離開作用域即使放作用域內(nèi)的變量。
  2. 釋放堆內(nèi)存,通常就是由智能指針來釋放內(nèi)存。也是模擬棧內(nèi)存的釋放模式,即在離開作用域時判斷是否需要釋放內(nèi)存。

內(nèi)存的釋放是Rust的核心內(nèi)容,涉及到所有權(quán)、借用、和生命周期以及智能指針。這些也是Rust的難點,勸退了眾多想嘗試Rust的開發(fā)者。后面我們會詳細(xì)介紹這一部分。不過接下來我們需要先鋪墊Rust基礎(chǔ)內(nèi)容,以后再探秘這些難點。

總結(jié):

  • let關(guān)鍵字用于聲明變量,此外它還用于模式匹配。
  • mut關(guān)鍵字用于聲明可變變量。
  • const關(guān)鍵字用于聲明常量。。

以上就是Rust中不可變變量與const的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于Rust不可變量與const區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Rust?中?Mutex?的基本用法

    Rust?中?Mutex?的基本用法

    Rust?標(biāo)準(zhǔn)庫中的?Mutex?結(jié)構(gòu)體位于?std::sync::Mutex?中,它提供了線程安全的數(shù)據(jù)訪問,Mutex?保證了在同一時間只有一個線程可以訪問被鎖定的數(shù)據(jù),這篇文章主要介紹了Rust?中?Mutex?的基本用法,需要的朋友可以參考下
    2024-05-05
  • 利用rust實現(xiàn)一個命令行工具

    利用rust實現(xiàn)一個命令行工具

    這篇文章主要為大家詳細(xì)介紹了如何使用?Rust?和?clap?4.4.0?創(chuàng)建一個命令行工具?my_dev_tool,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2023-12-12
  • Rust中的模塊系統(tǒng)之控制作用域與私有性詳解

    Rust中的模塊系統(tǒng)之控制作用域與私有性詳解

    這篇文章總結(jié)了Rust模塊系統(tǒng)的基本規(guī)則,包括如何聲明模塊、路徑訪問、私有性與公開性,以及如何使用`use`關(guān)鍵字簡化路徑引用,通過一個餐廳系統(tǒng)示例,展示了如何利用模塊劃分功能,并介紹了如何在其他模塊或二進(jìn)制crate中使用這些模塊
    2025-02-02
  • Rust中使用Serde對json數(shù)據(jù)進(jìn)行反序列化

    Rust中使用Serde對json數(shù)據(jù)進(jìn)行反序列化

    JSON作為目前流行的數(shù)據(jù)格式之一,被大家廣泛使用,在日常的開發(fā)實踐中,將JSON數(shù)據(jù)反序列化為對應(yīng)的類型具有重要的意義,在Rust中,Serde幾乎成了JSON數(shù)據(jù)解析的事實標(biāo)準(zhǔn),本文將給大家介紹Rust中使用Serde對json數(shù)據(jù)進(jìn)行反序列化,需要的朋友可以參考下
    2024-01-01
  • 從零開始使用Rust編寫nginx(TLS證書快過期了)

    從零開始使用Rust編寫nginx(TLS證書快過期了)

    wmproxy已用Rust實現(xiàn)http/https代理,?socks5代理,?反向代理,?負(fù)載均衡,?靜態(tài)文件服務(wù)器,websocket代理,四層TCP/UDP轉(zhuǎn)發(fā),內(nèi)網(wǎng)穿透等,本文給大家介紹從零開始使用Rust編寫nginx(TLS證書快過期了),感興趣的朋友一起看看吧
    2024-03-03
  • C和Java沒那么香了,Serverless時代Rust即將稱王?

    C和Java沒那么香了,Serverless時代Rust即將稱王?

    Serverless Computing,即”無服務(wù)器計算”,其實這一概念在剛剛提出的時候并沒有獲得太多的關(guān)注,直到2014年AWS Lambda這一里程碑式的產(chǎn)品出現(xiàn)。Serverless算是正式走進(jìn)了云計算的舞臺
    2021-06-06
  • rust標(biāo)準(zhǔn)庫std::env環(huán)境相關(guān)的常量

    rust標(biāo)準(zhǔn)庫std::env環(huán)境相關(guān)的常量

    在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見的兩種方式和處理環(huán)境變量的兩種常見方式, 拋開Rust的語法, 實際上在命令行參數(shù)的處理方式上, 與其它語言大同小異, 可能影響我們習(xí)慣的也就只剩下語法,本文介紹rust標(biāo)準(zhǔn)庫std::env的相關(guān)知識,感興趣的朋友一起看看吧
    2024-03-03
  • 關(guān)于rust的模塊引入問題

    關(guān)于rust的模塊引入問題

    Rust 語言是一種高效、可靠的通用高級語言,它的執(zhí)行效率也是令人稱贊的,是一種少有的兼顧開發(fā)效率和執(zhí)行效率的語言,這篇文章主要介紹了rust的模塊引入相關(guān)知識,需要的朋友可以參考下
    2022-10-10
  • 深入了解Rust?結(jié)構(gòu)體的使用

    深入了解Rust?結(jié)構(gòu)體的使用

    結(jié)構(gòu)體是一種自定義的數(shù)據(jù)類型,它允許我們將多個不同的類型組合成一個整體。下面我們就來學(xué)習(xí)如何定義和使用結(jié)構(gòu)體,并對比元組與結(jié)構(gòu)體之間的異同,需要的可以參考一下
    2022-11-11
  • Rust語言之trait中的個方法可以重寫嗎

    Rust語言之trait中的個方法可以重寫嗎

    在Rust中,trait定義了一組方法,這些方法可以被一個或多個類型實現(xiàn),當(dāng)你為某個類型實現(xiàn)一個trait時,你可以為該trait中的每個方法提供自己的具體實現(xiàn),本文將給大家介紹一下trait中的個方法是否可以重寫,需要的朋友可以參考下
    2023-10-10

最新評論