?

? 可以用于Result 和 Option的传播

mod

在 Rust 中,父模块完全无法访问子模块中的私有项,但是子模块却可以访问父模块、父父..模块的私有项。

'static

使用 Box::leak 也可以产生 'static 生命周期

切片和切片引用

Rust 语言特性内置的 str 和 [u8] 类型都是切片,前者是字符串切片,后者是数组切片 在 Rust 中,所有的切片都是动态大小类型,它们都无法直接被使用

堆与栈

Rust 堆上对象还有一个特殊之处,它们都拥有一个所有者,因此受所有权规则的限制:当赋值时,发生的是所有权的转移(只需浅拷贝栈上的引用或智能指针即可),底层数据并不会被拷贝,转移所有权仅仅是复制一份栈中的指针,再将新的指针赋予新的变量,然后让拥有旧指针的变量失效,最终完成了所有权的转移

当栈上数据转移所有权时,实际上是把数据拷贝了一份,最终新旧变量各自拥有不同的数据,因此所有权并未转移。

在 Rust 中,想实现不同类型组成的数组只有两个办法:枚举和特征对象,前者限制较多,因此后者往往是最常用的解决办法。

b"string"

#![allow(unused)]
fn main() {
let a = b"string";
}

这种写法可以将一个 &str 字符串转变成一个字节数组:&[u8;10]