Rust 动态大小类型
Rust About 863 words动态大小类型 dynamically sized types
有时被称为DST
或unsized types
。
这些类型是运行时才知道占用的内存大小。
DST 常规用法
他们有一些额外的元信息来储存动态信息的大小。
DST 黄金规则
必须将动态大小类型的值置于某种指针之后。
DST str
没错,不是&str
,而是str
本身。str
是一个DST
;直到运行时我们都不知道字符串有多长。
因为直到运行时都不能知道其大小,也就意味着不能创建str
类型的变量,也不能获取str
类型的参数。
dyn
为了将trait
用于trait
对象,必须将他们放入指针之后,比如&dyn Trait
或Box<dyn Trait>
(Rc<dyn Trait>
也可以)
Sized
Rust
隐式的为每一个泛型函数增加了Sized bound
fn generic<T>(t: T) {
// --snip--
}
实际上被当作如下处理:
fn generic<T: Sized>(t: T) {
// --snip--
}
?Sized
泛型函数默认只能用于在编译时已知大小的类型。
然而可以使用如下特殊语法来放宽这个限制:
?Sized 上的 trait bound 意味着 “T 可能是也可能不是 Sized”
同时这个注解会覆盖泛型类型必须在编译时拥有固定大小的默认规则。
这种语法只能用于 Sized ,而不能用于任何其他 trait。
注意我们将 t 参数的类型从 T 变为了 &T:因为其类型可能不是 Sized 的,所以需要将其置于某种指针之后。
fn generic<T: ?Sized>(t: &T) {
// --snip--
}
返回闭包
fn returns_closure() -> Box<dyn Fn(i32) -> i32> {
Box::new(|x| x + 1)
}
Views: 972 · Posted: 2023-04-23
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...