當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Sized用法及代碼示例


本文簡要介紹rust語言中 Trait std::marker::Sized 的用法。

用法

pub trait Sized { }

在編譯時已知的具有恒定大小的類型。

所有類型參數都具有 Sized 的隱式界限。如果不合適,可以使用特殊語法?Sized 來刪除此綁定。

struct Foo<T>(T);
struct Bar<T: ?Sized>(T);

// struct FooUse(Foo<[i32]>); // error: Sized is not implemented for [i32]
struct BarUse(Bar<[i32]>); // OK

一個例外是特征的隱式 Self 類型。特征沒有隱式 Sized 綁定,因為這與 trait object 不兼容,根據定義,特征需要與所有可能的實現者一起工作,因此可以是任意大小。

盡管 Rust 可以讓你將 Sized 綁定到一個 trait,但你以後不能使用它來形成一個 trait 對象:

trait Foo { }
trait Bar: Sized { }

struct Impl;
impl Foo for Impl { }
impl Bar for Impl { }

let x: &dyn Foo = &Impl;    // OK
// let y: &dyn Bar = &Impl; // error: the trait `Bar` cannot
                            // be made into an object

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait std::marker::Sized。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。