中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

鎮(zhèn)江百度競(jìng)價(jià)南昌seo管理

鎮(zhèn)江百度競(jìng)價(jià),南昌seo管理,臺(tái)州網(wǎng)站開(kāi)發(fā),合肥網(wǎng)站設(shè)計(jì)公司文章目錄 一、string二、所有權(quán)2.1 所有權(quán)與作用域2.2 對(duì)所有權(quán)的操作2.2.1 轉(zhuǎn)移2.2.3 拷貝2.2.3 傳遞 2.3 引用2.3.1 借用2.3.2 可變引用 一、string 之前學(xué)習(xí)過(guò) Rust 只有幾種基礎(chǔ)的數(shù)據(jù)類型,但是沒(méi)有常用的字符串也就是String,今天來(lái)學(xué)習(xí)一下 String…

文章目錄

  • 一、string
  • 二、所有權(quán)
    • 2.1 所有權(quán)與作用域
    • 2.2 對(duì)所有權(quán)的操作
      • 2.2.1 轉(zhuǎn)移
      • 2.2.3 拷貝
      • 2.2.3 傳遞
    • 2.3 引用
      • 2.3.1 借用
      • 2.3.2 可變引用

一、string

之前學(xué)習(xí)過(guò) Rust 只有幾種基礎(chǔ)的數(shù)據(jù)類型,但是沒(méi)有常用的字符串也就是String,今天來(lái)學(xué)習(xí)一下 String;
Rust 中 String 是標(biāo)準(zhǔn)庫(kù)的一部分,也就是 std::String , 但是這個(gè) String 與其他語(yǔ)言中的 String 稍有不同,比如:
在這里插入圖片描述

可以看到,當(dāng)我想要以一種為指定字符串類型的方式定義了一字符串變量時(shí),編譯器自動(dòng)顯示出的類型是 &srr 而非 String, 而我指定了 String 類型后仍然有錯(cuò);而從編譯器給出的提示不難看出,“hello” 這樣定義得到的是一個(gè) “&str” 類型的值而非是個(gè)字符串,那么我們先假定這是一種未知的類型,后續(xù)再處理它,先去想辦法定義出我們的字符串,打開(kāi)官方文檔: https://doc.rust-lang.org/std/string/struct.String.html

可以看到官方文檔第一個(gè)示例告訴我們要像這樣創(chuàng)建字符串:
在這里插入圖片描述

但是官方?jīng)]說(shuō)為什么要這樣定義,幸好 Rust 的源碼是可以點(diǎn)進(jìn)去的, 從 String::from 向里一步步執(zhí)行:
在這里插入圖片描述

from 執(zhí)行的操作只有一個(gè)就是調(diào)用 to_owned 函數(shù),但是需要注意,這里傳進(jìn)來(lái)的參數(shù)類型仍然是"&str"; 然后 to_owned 下一步是調(diào)用 as_bytes().to_owned() ,最后這個(gè) to_owned() 則是調(diào)用了 to_vec ;
那么至此也就明白了,對(duì)于這一行代碼:

    let hello = String::from("Hello, ");

我們傳入的 “Hello,” 這會(huì)被編譯器認(rèn)為是一個(gè)字符數(shù)組,也就是一個(gè)字符串常量,即無(wú)法對(duì)其造成改變的一個(gè)對(duì)象;但是我們需要的是一個(gè)可變的字符串而非一組固定的字符,因此編譯器將這個(gè)字符數(shù)組擴(kuò)展為了一個(gè) vector , 也就變成了一個(gè)可變的字符數(shù)組,也就是我最終想要的字符串;

其實(shí)這和C++差不多,只不過(guò)C++string底層應(yīng)該直接是個(gè)指針而不是個(gè)vector

這樣一來(lái) “&str” 也就理解了,就是一個(gè)常量字符數(shù)組,所以是不可變的。在官方文檔搜一下,果然也有,并且還有個(gè)好聽(tīng)的名字,字符串切片(string slice),具體參考: https://doc.rust-lang.org/std/primitive.str.html

官方文檔中還介紹了兩種類型的互轉(zhuǎn)方法:
在這里插入圖片描述

剩下的使用就是這兩種類型自帶的一些接口了,具體請(qǐng)參閱官方文檔,這里不再細(xì)述;

二、所有權(quán)

2.1 所有權(quán)與作用域

很多小伙伴開(kāi)始學(xué)習(xí) Rust 是因?yàn)槁?tīng)說(shuō)這是一種比C++更安全的語(yǔ)言,所以來(lái)了解一下,那么它安全在哪里?就安全在所有權(quán)機(jī)制,不再需要開(kāi)發(fā)者像C++一樣的去人工管理內(nèi)存。

首先,所有程序都必須管理其運(yùn)行時(shí)使用計(jì)算機(jī)內(nèi)存的方式。一些語(yǔ)言中具有垃圾回收機(jī)制,在程序運(yùn)行時(shí)有規(guī)律地尋找不再使用的內(nèi)存,比如Java;另一些語(yǔ)言中,程序員必須親自分配和釋放內(nèi)存,比如C/C++。Rust 則選擇了第三種方式:通過(guò)所有權(quán)系統(tǒng)管理內(nèi)存,編譯器在編譯時(shí)會(huì)根據(jù)一系列的規(guī)則進(jìn)行檢查。如果違反了任何這些規(guī)則,程序都不能編譯。在運(yùn)行時(shí),所有權(quán)系統(tǒng)的任何功能都不會(huì)減慢程序。所有權(quán)有以下規(guī)則:

* Rust 中的每一個(gè)值都有一個(gè) 所有者(owner)。
* 值在任一時(shí)刻有且只有一個(gè)所有者。
* 當(dāng)所有者(變量)離開(kāi)作用域,這個(gè)值將被丟棄。

舉個(gè)例子,有以下一段代碼:

fn main() {let s1 = "hello";{                let s = "hello s"; }  let s2 = "hello";
}

在上面的代碼中, s 被一個(gè)括號(hào)圈住了,那么在這個(gè)括號(hào)里"hello s" 的所有者就是 s,而 s 的生命周期也只在括號(hào)范圍內(nèi),也就是 s1 出現(xiàn)時(shí) s 未出現(xiàn), s2 出現(xiàn)時(shí) s 已經(jīng)死去。

有過(guò)C++ 經(jīng)驗(yàn)的小伙伴看到這肯定很熟悉,這不就是 RAII 嗎,或者說(shuō) Rust 中的每個(gè)變量都是個(gè)智能指針。

2.2 對(duì)所有權(quán)的操作

2.2.1 轉(zhuǎn)移

剛剛說(shuō)到這種所有權(quán)機(jī)制與C++的 RAII 很像,變量也和智能指針很像,那么是不是就和智能指針一樣呢,測(cè)試一下:
在這里插入圖片描述

圖上可以看到,先定義了 s1 ,然后定義 s2 ,然后將 s1 傳遞給 s2 ,此時(shí)再使用 s1 會(huì)報(bào)錯(cuò),提醒你s1 的值已經(jīng)被轉(zhuǎn)移出去了, 這時(shí) s1 就已經(jīng)被清空了。因?yàn)?Rust 變量離開(kāi)作用域時(shí)會(huì)回收,所以如果這里不清空,在程序結(jié)束時(shí)s1 s2都會(huì)被回收,那么一塊內(nèi)存就會(huì)回收了兩次,因此 Rust 的機(jī)制中 = 操作是轉(zhuǎn)移而非拷貝。

看到這里,還是覺(jué)得是智能指針,只不過(guò)是unique_ptr,QAQ

2.2.3 拷貝

= 是轉(zhuǎn)移而不是拷貝,那么想要使用拷貝該怎么寫呢?比如字符串這樣:
在這里插入圖片描述

調(diào)用 clone 函數(shù)就行了。

然后有一個(gè)很有意思的事情,比如:
在這里插入圖片描述

i32 類型變量不需要使用 clone 之類的函數(shù),= 居然就是拷貝而不是轉(zhuǎn)移;
官方給出的解釋是 “像整型這樣的在編譯時(shí)已知大小的類型被整個(gè)存儲(chǔ)在棧上,所以拷貝其實(shí)際的值是快速的。這意味著沒(méi)有理由在創(chuàng)建變量 y 后使 x 無(wú)效?!?/strong> 恕我直言,這不就是Rust中所有用到堆的變量就用的是智能指針嗎。。。。。當(dāng)然也可能是我理解不夠深,反正我目前為止的感受就是這樣。。。。

2.2.3 傳遞

之前提到過(guò) “值在任一時(shí)刻有且只有一個(gè)所有者” ,那么如果將值傳遞給函數(shù)會(huì)怎么樣呢:
在這里插入圖片描述

很明顯,作為參數(shù)傳遞給函數(shù)之后就失去了所有權(quán);
但這樣會(huì)帶來(lái)一個(gè)問(wèn)題,這個(gè)值如果不只一個(gè)函數(shù)再用后續(xù)怎么辦?用函數(shù)返回值返回!
但是如果參數(shù)不只有一個(gè)呢?為每個(gè)函數(shù)的返回值都定一個(gè)結(jié)構(gòu)體?
這樣太麻煩了,萬(wàn)幸的是 Rust 提供了 引用。

2.3 引用

2.3.1 借用

官方說(shuō)明中“引用(reference)像一個(gè)指針,因?yàn)樗且粋€(gè)地址,我們可以由此訪問(wèn)儲(chǔ)存于該地址的屬于其他變量的數(shù)據(jù)。 與指針不同,引用確保指向某個(gè)特定類型的有效值。”
很好理解,改一下剛才的代碼:
在這里插入圖片描述

可以用了,修改就是函數(shù)聲明參數(shù)時(shí)加了一個(gè)&,傳參時(shí)也加了一個(gè)&;

變量 str 有效的作用域與函數(shù)參數(shù)的作用域一樣,不過(guò)當(dāng) str 停止使用時(shí)并不丟棄引用指向的數(shù)據(jù),因?yàn)?str 并沒(méi)有所有權(quán)。當(dāng)函數(shù)使用引用而不是實(shí)際值作為參數(shù),無(wú)需返回值來(lái)交還所有權(quán),因?yàn)榫筒辉鴵碛兴袡?quán)。

Rust 將創(chuàng)建一個(gè)引用的行為稱為 借用(borrowing)。正如現(xiàn)實(shí)生活中,如果一個(gè)人擁有某樣?xùn)|西,你可以從他那里借來(lái)。當(dāng)你使用完畢,必須還回去,并不擁有它,因此借用的值無(wú)法修改。
在這里插入圖片描述

2.3.2 可變引用

正如不可變變量與可變變量一樣,引用也可以變?yōu)榭勺円?#xff0c;加個(gè) mut 關(guān)鍵試試:
在這里插入圖片描述

當(dāng)然,像這段代碼所寫的,想要成為可變引用的前提是自身就是可變的。
另外,由于 Rust 的三條基礎(chǔ)規(guī)則之“值在任一時(shí)刻有且只有一個(gè)所有者”,那么對(duì)于一個(gè)可變變量在同一個(gè)時(shí)刻也就不可以有多個(gè)引用;換個(gè)角度理解比如用一個(gè) s1 作為 s 的可變引用后,那么 s 將不再可用,也自然不能再對(duì)一個(gè)無(wú)法使用的變量創(chuàng)建引用,如果這樣使用編譯器就會(huì)報(bào)錯(cuò):
在這里插入圖片描述

http://www.risenshineclean.com/news/43665.html

相關(guān)文章:

  • 門戶網(wǎng)站開(kāi)發(fā)要多久深圳seo優(yōu)化推廣公司
  • 如何做新聞源網(wǎng)站如何讓新網(wǎng)站被收錄
  • 網(wǎng)站建設(shè)的方法學(xué)生網(wǎng)頁(yè)制作成品
  • 專業(yè)網(wǎng)站建設(shè)服務(wù)公司哪家好廣州今日頭條新聞最新
  • 云南新建設(shè)國(guó)際小學(xué)網(wǎng)站百度手機(jī)下載安裝
  • app展示網(wǎng)站網(wǎng)絡(luò)seo首頁(yè)
  • 響應(yīng)式網(wǎng)站設(shè)計(jì)稿百度知道下載
  • google網(wǎng)站建設(shè)騰訊新聞最新消息
  • 怎么做淘寶客網(wǎng)站優(yōu)化seo排名第一的企業(yè)
  • wordpress換身 變身品牌企業(yè)seo咨詢
  • 網(wǎng)站建設(shè)h5seo的關(guān)鍵詞無(wú)需
  • 做名片哪個(gè)網(wǎng)站可以找軟文營(yíng)銷模板
  • 山東省兩學(xué)一做網(wǎng)站百度競(jìng)價(jià)推廣流程
  • wordpress插件殘留怎么刪除網(wǎng)絡(luò)優(yōu)化包括
  • 廣州app網(wǎng)站建設(shè)長(zhǎng)沙網(wǎng)絡(luò)優(yōu)化產(chǎn)品
  • 網(wǎng)站建設(shè)及售后服務(wù)的說(shuō)明書(shū)網(wǎng)絡(luò)推廣哪個(gè)平臺(tái)好
  • 網(wǎng)站備案查詢系統(tǒng)php版網(wǎng)絡(luò)營(yíng)銷的現(xiàn)狀和發(fā)展趨勢(shì)
  • 織夢(mèng)網(wǎng)站如何做關(guān)鍵詞產(chǎn)品營(yíng)銷策略有哪些
  • 小蝌蚪緊急自動(dòng)跳轉(zhuǎn)中seo搜索引擎優(yōu)化技術(shù)
  • 企業(yè)網(wǎng)站設(shè)計(jì)中應(yīng)注意產(chǎn)品發(fā)布功能優(yōu)化互聯(lián)網(wǎng)營(yíng)銷師證書(shū)怎么考多少錢
  • 網(wǎng)站建設(shè)價(jià)格與哪些關(guān)鍵詞優(yōu)化排名查詢
  • 地圖如果插入網(wǎng)站網(wǎng)站平臺(tái)都有哪些
  • 西安購(gòu)物網(wǎng)站建設(shè)2022年新聞熱點(diǎn)事件
  • 學(xué)會(huì)網(wǎng)站建設(shè)網(wǎng)絡(luò)推廣員要怎么做
  • 專業(yè)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)百度云盤資源搜索
  • 網(wǎng)站建設(shè)兩年免費(fèi)維護(hù)正規(guī)seo排名公司
  • 高端網(wǎng)站建設(shè)天軟科技廣告設(shè)計(jì)與制作
  • 南京領(lǐng)動(dòng)做網(wǎng)站怎么樣寧波網(wǎng)站建設(shè)公司
  • 個(gè)人網(wǎng)站制作總體設(shè)計(jì)熱搜榜上2023年熱搜
  • 手機(jī)網(wǎng)站 圖片自適應(yīng)2021年十大熱點(diǎn)事件