Rust裡為什麼要區分Copy型別的borrow和unborrow形式

時間 2021-06-01 02:47:29

1樓:hu zhi

看乙個問題要抓住關鍵部分:

「這個時候不管你 move 還是 borrow 還是 clone, 執行時代價都是一樣的」

誰說不管用 move 還是 borrow 還是 clone,代價都一樣?

move/clone 一下要 copy 所有 byte。borrow 只需要建立乙個 8bytes 的指標。要是 input 是個20k 大的 array 呢?

2樓:F001

因為指標和值是完全不同的語義啊,無法替代。比如舉個最簡單的例子,你不用指標只用拷貝,如何實現?

letmut

shared_value

: i32=0

;letr=

with_side_effect(&

mutshared_value

);沒有借用,with_side_effect 函式就沒有可能修改 shared_value. 即便是唯讀引用,&i32 和 i32 也是表達的不同的意思。有些時候你就是需要 &i32,用 i32 型別是不對的。

原問題中的這個不方便,主要是標準庫竟然沒有實現 i32 和 &i32 之間的比較 PartialEq trait。然而 i32 和 &i32 型別之間卻實現了各種算數運算,比如 Add。這個行為好像有點不大一致。

3樓:JUNKUN

我覺得有以下幾種考慮:其一,實現Copy的型別可能比較大,使用引用能最大程度節約記憶體。其二,對於Copy型別的可變借用是很有用的,例如可變借用傳參,從函式內修改函式外的變數。

其三,因為借用是有用的,因此更要與普通型別保持一致,如果Copy和非Copy的借用不同,會造成困惑。

Rust的設計中為什麼要區分不可變變數和常量?

Tracy Liang 剛剛在學習,同樣有這個疑問。const 在編譯期確定,可能是字面值,指令運算元。不占用資料段,不在堆疊,靜態區等記憶體空間。let 是執行期佔記憶體空間的,有實體,一般都有位址。只是不可變,在初始化就確定了,但是唯讀。我是不知道這種唯讀變數的意義。 套路小迷糊 對於初級玩家來...

漢語為什麼要區分 的 , 地 , 得 ?

幻想的世界 不邀自來 的 一般用於形容詞後面接名詞,xx的xx,比如繁忙的學業,嚴厲的老師 地 一般是用於副詞副詞或形容詞後面接動詞或形容詞 形容詞極少遇見 比如默默地離開,慢慢地走 得 一般是後面的詞補充說明 修飾 前面的詞一般已動詞 修飾詞出現的居多,舉例笑得開心,做得很好 一般來說 的 的使用...

為什麼康德要區分直觀和概念?

那克爾 在康德那裡,直觀和概念並不是相對的概念,而是認識過程中的兩個程式。與直觀相關的是物自體 感性 先驗感性形式和感性直觀。與概念相關的是感性材料 知性 先驗知性形式 想象力綜合 圖型法。這個過程模模糊糊應該是 認識主體主動接受物自體帶來的刺激 認識主體接受物自體刺激時的主動性就是感性 認識主體的...