首页 > 其他分享 >Rust学习 - Sized trait

Rust学习 - Sized trait

时间:2022-10-05 13:23:06浏览次数:55  
标签:trait Sized 编译 类型 大小 Rust

Sized trait的作用是什么?

  编译期用它来识别在编译期确定大小的类型。Sized trait是空trait,仅仅作为标签trait供编译期使用。真正起“打标签”作用的是属性#[lang = "sized"]。该属性ang表示Sized trait供rust语言本身使用,声明为"Sized",称为语言项(Lang Item)。

  Rust语言中大部分类型都是默认Sized,如果需要使用动态大小类型,则需要改为<T: ?Sized>限定。

 

Sized, Unsize和?Sized的关系

  • Sized标记的是在编译期可确定大小的类型
  • Unsized标记的是动态大小类型,在编译期无法确定其大小;目前Rust中的动态类型有trait和[T],其中[T]代表一定数量的T在内存中的一次排列,但不知道具体的数量,所以大小是末知的。
  • ?Sized标记的类型包含了Sized和Unsized所标识的两种类型。所以泛型结构体,如:struct Bar<T: ?Sized>(T) 支持编译期可确定大小类型和动态大小类型两种类型。

 

动态大小类型的限制规则

  • 只可以通过胖指针来操作Unsize类型,如&[T]或者&trait
  • 变量,参数和枚举变量不能使用动态大小类型
  • 结构体中只有一个字段可以使用动态大小类型,其它字段不可以使用

标签:trait,Sized,编译,类型,大小,Rust
From: https://www.cnblogs.com/johnnyzhao/p/16755428.html

相关文章