五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++右值引用

2022-04-16 11:42 作者:CSDN首席噴子  | 我要投稿

在C++中,值分為右值和左值。所謂右值就是賦值等號(hào)右邊的值,左值就是左邊的值。觀(guān)察賦值過(guò)程Car car1 = Car{ },可以發(fā)現(xiàn):

(1)左值有名字,右值沒(méi)有名字。

(2)運(yùn)行時(shí)首先分配右值的內(nèi)存,然后分配左值內(nèi)存,再把右值內(nèi)存復(fù)制到左值。

因此,C++傳參數(shù)時(shí)(如函數(shù)和容器調(diào)用)都會(huì)伴隨著內(nèi)存的復(fù)制,效率很低。反觀(guān)其它語(yǔ)言(如C#),由于變量實(shí)際上是一個(gè)引用,右值和左值是同一個(gè)內(nèi)存,沒(méi)有復(fù)制。


C++ 11標(biāo)準(zhǔn)在語(yǔ)法層面上引入了右值引用,有效減少了浪費(fèi)。在C++ 11之前,右值是不能非const引用的:

而右值引用則可以在非const情況下賦值:

此時(shí)內(nèi)存上只有一個(gè)Car。注意,當(dāng)賦值給car4以后,因?yàn)橛辛嗣郑╟ar4),這塊內(nèi)存重新變成了一個(gè)左值。好在標(biāo)準(zhǔn)庫(kù)中的std::move函數(shù)能夠?qū)⒆笾缔D(zhuǎn)換為右值:

std::move函數(shù)的另一個(gè)功能是能夠?qū)⒂抑狄棉D(zhuǎn)換為一個(gè)右值,這個(gè)過(guò)程會(huì)調(diào)用該類(lèi)型的移動(dòng)構(gòu)造函數(shù):

在func處,c被重新轉(zhuǎn)換為一個(gè)右值賦給形式參數(shù)passin,此時(shí)調(diào)用移動(dòng)構(gòu)造函數(shù)。此時(shí),就可以大膽地使用等號(hào)賦值基本類(lèi)型,并使用std::move移動(dòng)復(fù)合類(lèi)型的內(nèi)存了。


C++右值引用的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
庆元县| 丁青县| 德清县| 岑巩县| 开化县| 图木舒克市| 河北省| 洛扎县| 长岭县| 策勒县| 凌源市| 钟祥市| 锡林郭勒盟| 阆中市| 枣强县| 桐梓县| 玛沁县| 化德县| 肥城市| 古丈县| 鲁甸县| 玉门市| 哈巴河县| 宝山区| 兴仁县| 敦煌市| 沅陵县| 刚察县| 苗栗市| 同江市| 吉安县| 永嘉县| 大关县| 平山县| 灌云县| 招远市| 巨野县| 新竹市| 平顺县| 通河县| 临潭县|