作者yam276 (史莱哲林的优等生)
看板Marginalman
标题Re: [闲聊] Rust: 从入门到入门
时间Mon Mar 24 10:33:08 2025
: 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://webptt.com/cn.aspx?n=bbs/Marginalman/M.1742783590.A.6A1.html