看板 Marginalman 關於我們 聯絡資訊
: https://space.bilibili.com/361469957/lists/3902595 : 從入門到入門 1. 左值 Rust有類似C++的左值,即放在等號左側的東西 包含: (1) 變數,例如:a (2) 解引用,例如::*a (3) 變數的欄位存取,例如:a.0 (tuple)、a.field (結構) (4) 上述任何組合,例如:*((*a)[0].1) 2. 地址不可變 let num: &mut i32 = &mut v[2]; num是一個v[2]的可變引用, 但num本身沒有let mut宣告, 因此他雖然是可變引用,但本體(指向的地址)不可變 類似C++的 int* const num const放型態後代表地址不可變但地址上的數值可變 3. 釋放權限 Rust編譯器很聰明,會在編譯階段就判斷一個引用最後使用之後釋放權限 4. Flow權限 除了常見的Read、Write、Owner之外其實還有一個Flow權限, fn first_or(strings: &Vec<String>, default: &String) -> &String { if strings.len() > 0 { &strings[0] } else { default } } 這不會過編譯,因為編譯器不知道返回的引用是誰 Rust不會管函數內容怎麼寫,但他會看簽名符號。 以這個例子來說,因為不知道first_or返回的是誰的引用, 因此離開此function之後有可能釋放到default, 而離開此function之後,如果後面使用到default的引用則出現不確定性, 這種情況不是不行,但需要生命週期參數來表達,不過目前還沒學到。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.143.163 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1742783590.A.6A1.html