我們有一個不可複製型A
和這樣定義的特徵T
:爲什麼是'讓裁判一:性狀= Struct`禁止
struct Struct;
trait Trait {}
impl Trait for Struct {}
如果我們創建一個&Struct
和DEREF它,我們得到一個右值引用我們可以用它來初始化一個由-REF結合:
let a: &Struct = &Struct;
let ref a: Struct = *a;
我們也可以直接初始化由參綁定:
let ref a: Struct = Struct;
但是,如果我們宣佈我們的變量綁定需要一個參考,僅第一代碼片段工作
let a: &Trait = &Struct;
let ref a: Trait = *a;
試圖做到這一點直接
let ref a: Trait = Struct;
,或者通過循環去
let a: &Struct = &Struct;
let ref a: Trait = *a;
或
let ref a: Trait = *&Struct;
會給我們一個mismatched types
錯誤。顯然它們不是相同的類型,但推理適用於參考。
這是根本沒有實現(還?)還是有更深的理由,它被禁止?
你如何得到MIR輸出? –
所以基本上這意味着rustc不能取消右值引用,但只能實際引用。 @PiotrZolnierek:http://play.rust-lang.org上有一個「MIR」按鈕 –