日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

38.借用与引用

發布時間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 38.借用与引用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/* 1.rust中借用和引用的附帶功效都一樣,就是都有生命周期。借用使用&關鍵字,引用使用ref關鍵字。借用的對象是必須存在的,引用的對象可以虛擬的,后期附上對象。 2.match的模式匹配上只能使用 ref,在函數聲明上只能使用&來表示引用類型 3.非要給區分ref和&到底哪個是引用,哪個是借用。我們可以先從詞性劃分,引用我歸類為名詞,而借用歸類為動詞。&A在表達式上 表示借用A,這是一個動作,那結果就是產出一個引用類型。所以let ref B表示聲明了一個引用類型,它只能綁定到某次借用動作上。所以ref 更適合叫引用, &叫借用。我們在不同情況下解釋&的意思:在表達式上,表示的是借用。在變量綁定上,表示解地址操作與*類似。在類型聲明上,表示引用類型。在模式匹配上,無效關鍵字那么ref的通用解釋是:在表達式上,無效關鍵字。在變量綁定上,表示引用類型。在類型聲明上,無效關鍵字。在模式匹配上,表示引用類型。https://www.jianshu.com/p/ac519d8c5ec9 https://www.cnblogs.com/chen8840/p/12699265.html https://www.jianshu.com/p/7ac48c978624 */#![feature(core_intrinsics)]fn print_type_name_of<T>(_: T) {println!("{}", unsafe { std::intrinsics::type_name::<T>() }) }fn test1() {let ref a1: i32;//a = 1; expected `&i32`, found integer help: consider borrowing here: `&1`a1 = &1;print_type_name_of(a1); //&i32let ref a2 = 1;print_type_name_of(a2); //&i32let ref a3 = &1;print_type_name_of(a3); //&&i32let c = 'Q';// 賦值語句中左邊的 `ref` 關鍵字等價于右邊的 `&` 符號。let ref ref_c1 = c;let ref_c2 = &c;println!("ref_c1 equals ref_c2: {}", *ref_c1 == *ref_c2);//& 與 * 的關系, 那么&用在綁定上是怎么樣的?其實&用在綁定上與*用在表達式上是一樣的:let r1 = &1;print_type_name_of(r1); //&i32let &r2 = r1;print_type_name_of(r2); //i32let r3 = *r1;print_type_name_of(r3); //i32 }fn test2() {fn f1(_s: &String) {println!("{:p}", _s);}fn f2(ref _s: String) {println!("{:p}", _s);}let s = String::from("hello");let sref1 = &s;let ref sref2 = s;println!("{:p}", sref1);println!("{:p}", sref2);f1(&s);f2(s); }fn test3() {let x = &false;print_type_name_of(x);let &x = &false;print_type_name_of(x);let ref x = false;print_type_name_of(x);let ref x = &false;print_type_name_of(x); }fn test4() {let os = Some(String::from("s"));match os {//Some(s) => { 如果這樣寫下面的打印信息將不可編譯 : value borrowed here after partial moveSome(ref s) => {print_type_name_of(s); //&alloc::string::String}_ => (),};println!("{:?}", os);let os = &Some(String::from("s"));match os {Some(s) => {print_type_name_of(s); //&alloc::string::String}_ => (),}; }fn main() {test1();test2();test3();test4(); }

?

總結

以上是生活随笔為你收集整理的38.借用与引用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。