Re: [閒聊] Rust: 從入門到入門

作者: yam276 ('_')   2025-03-24 10:33:08
: 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的引用則出現不確定性,
這種情況不是不行,但需要生命週期參數來表達,不過目前還沒學到。

Links booklink

Contact Us: admin [ a t ] ucptt.com