作者yam276 (史莱哲林的优等生)
看板Marginalman
标题Re: [闲聊] Rust: 从入门到入门
时间Wed Mar 19 13:53:09 2025
: 从入门到入门
1. String 与 &str
Rust的String储存资料到Stack跟Heap
存在Stack的资料包含指标、字串长度、可储存字元容量
Heap才储存字串本体 存取从Stack的指标去Heap找本体
&str只是一段指向String片段的指标
只包含指标与字串长度 不拥有字串内容与所有权
Rust编译器会确保&str可用
具体作法是 编译阶段确认&str使用时 目标String还没被释放
如果目标String已经被释放 会编译失败
2. Tuple
比C++好用
残忍比较:
Rust:
let x = tup.0; // 取出第一个元素
let tup = (42, 3.14, 'a'); // 编译器知道这是 (i32, f64, char)
let (x, y, z) = tup; // 可以直接赋予
let unit = (); // 空Tuple 这个C++没有
C++:
// 取出第一个元素
auto x = std::get<0>(tup);
// 需要显式指定,或者用auto搭配make_tuple
auto tup = std::make_tuple(42, 3.14, 'a');
// 要用tie赋予
int x;
double y;
char z;
std::tie(x, y, z) = tup;
3. 语句(Statement)与表达式(Expression)
语句没回传值 表达式有
{}也是表达式 可以拿来做奇妙操作
4. loop
let mut counter = 0;
let result = {
loop {
counter += 1;
if counter == 10 {
break
counter * 2;
}
}
};
则result = 10 * 2 = 20
'label_1: loop {
// ...
loop {
// ...
break
'label_1 // 直接跳出最外面的
}
}
5. for range
for num in (1..4) {
// num = 1, 2, 3 共三次
}
可以让for执行特定次数
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.32.48.170 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Marginalman/M.1742363591.A.01E.html
1F:推 CureSky: 我都用structured binding 不用tie 03/19 14:01
我没C++17用 好恨
※ 编辑: yam276 (114.32.48.170 台湾), 03/20/2025 09:59:17