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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

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

3 回答

?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊

您需要Add在&Vector而不是在上實(shí)施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一樣,因此它們也可以實(shí)現(xiàn)特征。在引用類型上實(shí)現(xiàn)特征時(shí),的類型self是引用;引用按值傳遞。通常,Rust中按值傳遞意味著轉(zhuǎn)移所有權(quán),但是當(dāng)按值傳遞引用時(shí),它們只是被復(fù)制(或者,如果是可變引用,則重新借入/移動(dòng)),并且不會(huì)轉(zhuǎn)移引用的所有權(quán)(因?yàn)橐茫┦紫炔粨碛衅鋮⒄諏?duì)象)??紤]到所有這些,Add::add(和許多其他運(yùn)算符)self按值取值是有意義的:如果您需要獲得操作數(shù)的所有權(quán),則可以實(shí)現(xiàn)Add直接在結(jié)構(gòu)/枚舉上,如果沒(méi)有,則可以Add在引用上實(shí)現(xiàn)。


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


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


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


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

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

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

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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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