第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何實現(xiàn)“添加”特征來引用結(jié)構(gòu)?

如何實現(xiàn)“添加”特征來引用結(jié)構(gòu)?

Git
湖上湖 2019-11-02 11:04:58
我做了兩個元素的Vector結(jié)構(gòu),我想重載+運算符。我使所有函數(shù)和方法都采用引用而不是值,并且我希望+運算符以相同的方式工作。impl Add for Vector {    fn add(&self, other: &Vector) -> Vector {        Vector {            x: self.x + other.x,            y: self.y + other.y,        }    }}根據(jù)我嘗試的變化,我會遇到生命周期問題或類型不匹配。具體來說,該&self參數(shù)似乎沒有被視為正確的類型。我已經(jīng)看到了模板參數(shù)的例子上impl,以及Add,但他們只是導(dǎo)致不同的錯誤。我發(fā)現(xiàn)如何為不同的RHS類型和返回值重載運算符?但是即使我將a use std::ops::Mul;放在最前面,答案中的代碼也無法正常工作。我每晚使用rustc 1.0.0(ed530d7a3 2015-01-16 22:41:16 +0000)我不會接受“您只有兩個字段,為什么要使用引用”作為答案;如果我想要100個元素的結(jié)構(gòu)怎么辦?我將接受一個答案,該答案表明即使是大型結(jié)構(gòu),如果是這種情況,我也應(yīng)該按值傳遞(盡管我不這么認為。)我有興趣了解結(jié)構(gòu)大小的良好經(jīng)驗法則并傳遞值與結(jié)構(gòu),但這不是當前的問題。
查看完整描述

3 回答

?
慕俠2389804

TA貢獻1719條經(jīng)驗 獲得超6個贊

您需要Add在&Vector而不是在上實施Vector。


impl<'a, 'b> Add<&'b Vector> for &'a Vector {

    type Output = Vector;


    fn add(self, other: &'b Vector) -> Vector {

        Vector {

            x: self.x + other.x,

            y: self.y + other.y,

        }

    }

}

在其定義中,Add::add始終self取值。但是引用的類型與其他1一樣,因此它們也可以實現(xiàn)特征。在引用類型上實現(xiàn)特征時,的類型self是引用;引用按值傳遞。通常,Rust中按值傳遞意味著轉(zhuǎn)移所有權(quán),但是當按值傳遞引用時,它們只是被復(fù)制(或者,如果是可變引用,則重新借入/移動),并且不會轉(zhuǎn)移引用的所有權(quán)(因為引用)首先不擁有其參照對象)。考慮到所有這些,Add::add(和許多其他運算符)self按值取值是有意義的:如果您需要獲得操作數(shù)的所有權(quán),則可以實現(xiàn)Add直接在結(jié)構(gòu)/枚舉上,如果沒有,則可以Add在引用上實現(xiàn)。


在這里,self類型為&'a Vector,因為這是我們要實現(xiàn)的類型Add。


請注意,我還為RHS類型參數(shù)指定了不同的生存期,以強調(diào)兩個輸入?yún)?shù)的生存期無關(guān)的事實。


1實際上,引用類型的特殊之處在于,您可以為包裝箱中定義的類型的引用實現(xiàn)特征(即,如果允許為實現(xiàn)特征T,那么您也可以為實現(xiàn)它&T)。&mut T并Box<T>具有相同的行為,但是對于U<T>在U同一條板條箱中未定義的位置,通常情況并非如此。


查看完整回答
反對 回復(fù) 2019-11-02
?
胡說叔叔

TA貢獻1804條經(jīng)驗 獲得超8個贊

我所知道的最好的文檔將是關(guān)于返回指針的書章節(jié)。然而,我創(chuàng)建加入了大量結(jié)構(gòu)的一個例子,并檢查所產(chǎn)生的LLVM(略清潔的): (%struct.Big* sret, %struct.Big*, %struct.Big*)。我并沒有聲稱自己是LLVM專家,但是看起來它像是通過引用自動返回。

查看完整回答
反對 回復(fù) 2019-11-02
  • 3 回答
  • 0 關(guān)注
  • 510 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號