99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

全類型

2018-08-12 22:03 更新

全類型

大多數(shù)類型都有一個(gè)特定的大小,以字節(jié)為單位,是在編譯時(shí)可知。例如,一個(gè) 32 位大的 i32 或四個(gè)字節(jié)。然而,也有一些用于表達(dá)的類型,但沒有指定的大小。這些被稱為全類型或動(dòng)態(tài)大小類型。有一個(gè)例子是[T]。這個(gè)類型代表了序列中一定數(shù)量的 T。但是我們不知道有多少,所以不知道大小。    

Rust 使用許多這樣的類型,但是他們有一些限制。有如下三種:     

  1. 我們只能通過指針操作一個(gè)全類型的實(shí)例。一個(gè) &[T] 就可以了,但[T]不可以?! ?/li>
  2. 變量和參數(shù)沒有動(dòng)態(tài)大小類型?! ?/li>
  3. 只有 struct 的最后一個(gè)字段可能有一個(gè)動(dòng)態(tài)大小類型;其他字段沒有。動(dòng)態(tài)大小類型?!  ?/li>

所以,為什么要找麻煩呢?好吧,因?yàn)?[T] 只能在指針后使用如果我們沒有語言支持全類型,就不可能寫出下面代碼:

impl Foo for str {

impl<TFoo for [T] {

相反,你必須這樣寫:

impl Foo for &str {

這意味著,只能實(shí)現(xiàn)引用,而不是指針的其他類型。impl str,所有指針,包括(在某種程度上,首先有一些bug要修復(fù))用戶定義的定制智能指針,可以使用這個(gè) impl。

?Sized

如果你想寫一個(gè)接受一個(gè)動(dòng)態(tài)大小類型的函數(shù),你可以使用特殊的約束,?Sized:

struct Foo<T: ?Sized> {
f: T,
}

這個(gè)?,讀作“T可能的大小”,意味著這個(gè)綁定很特別:它讓我們匹配更多的種類,而不是更少。就像每一個(gè) T 隱式包含 T: Sized,并且?可以撤銷默認(rèn)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)