最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中move的使用及說(shuō)明

 更新時(shí)間:2023年08月08日 09:19:44   作者:昔拉天使  
這篇文章主要介紹了C++中move的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C++ move使用

move作用主要可以將一個(gè)左值轉(zhuǎn)換成右值引用,從而可以調(diào)用C++11右值引用的拷貝構(gòu)造函數(shù),在對(duì)象拷貝的時(shí)候,在運(yùn)行時(shí),它們不會(huì)產(chǎn)生一行代碼原先的對(duì)象也會(huì)清空, 可以減少資源創(chuàng)建和釋放。

作為可以歸納為以下幾點(diǎn)

1、std::move函數(shù)可以以非常簡(jiǎn)單的方式將左值引用轉(zhuǎn)換為右值引用。

2、通過(guò)std::move,可以避免不必要的拷貝操作。

3、std::move是為性能而生。

4、std::move是將對(duì)象的狀態(tài)或者所有權(quán)從一個(gè)對(duì)象轉(zhuǎn)移到另一個(gè)對(duì)象,只是轉(zhuǎn)移,沒(méi)有內(nèi)存的搬遷或者內(nèi)存拷貝。

兩個(gè)地址是獨(dú)立的,move操作實(shí)際上是系統(tǒng)將這一塊地址屬于哪一個(gè)地址的登記改一下,實(shí)際上這一塊內(nèi)存根本沒(méi)有發(fā)生任何變化。

打個(gè)比方,就好比說(shuō)一個(gè)房產(chǎn),原來(lái)登記在張三名下,“張三”就是地址。張三也有管理權(quán)。move就相當(dāng)于過(guò)戶(hù)。過(guò)戶(hù)給李四后,“李四”就是這個(gè)房子的“地址”,管理權(quán)自然也交接給了李四。

C++move函數(shù)詳解

C++11的一個(gè)最重要特性就是支持移動(dòng)語(yǔ)義,其中一個(gè)比較關(guān)鍵的函數(shù)就是 std::move 那這個(gè)函數(shù)的作用是什么?

首先打開(kāi)庫(kù)文件 找到move的定義:

注意:不要把&&理解成引用的引用,這就是一個(gè)關(guān)鍵字

大概函數(shù)如下:

template<class T>
remove_reference_t<T>&& move(T && a) noexcept
{
	return static_cast<remove_reference_t<T>&&>(arg);
}

說(shuō)白了這個(gè)函數(shù)的作用就是把傳進(jìn)來(lái)的參數(shù)強(qiáng)制轉(zhuǎn)換成右值引用

可能有些人會(huì)有疑問(wèn),

為什么參數(shù)已經(jīng)是右值引用了?

這就要說(shuō)到參數(shù)推導(dǎo)了比如以下例子:

template<typename T>
void foo(T&& params);

如果傳進(jìn)來(lái)的是一個(gè)左值

int a = 10;
foo(a);

此時(shí)params被推導(dǎo)為int& 如果傳進(jìn)來(lái)的是一個(gè)右值

foo(20);

此時(shí)paramas被推導(dǎo)為int&&

remove_reference的作用是什么?

就是去掉引用,比如int& 變成int int&&變成 int

也就是說(shuō)std::move把你傳進(jìn)來(lái)的參數(shù)所有的引用都去掉,然后在加上&&,也就是變成右值引用

remove_reference是怎么實(shí)現(xiàn)的?

非常簡(jiǎn)單,首先看看定義:

可以看到有了三個(gè)模板匹配,不管你傳的是什么,我都能去掉你的引用,通過(guò)::type得到你原始的類(lèi)型

其中remove_referenct_t 無(wú)非是一個(gè)方便的寫(xiě)法 typename是為了說(shuō)明 remove_reference是一個(gè)class

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

广昌县| 仁布县| 婺源县| 柳州市| 贡山| 贵南县| 老河口市| 定陶县| 拜城县| 丹寨县| 乌拉特前旗| 茶陵县| 繁昌县| 新营市| 广西| 米泉市| 西昌市| 监利县| 桦川县| 中牟县| 马山县| 醴陵市| 噶尔县| 淮阳县| 澄迈县| 巴楚县| 岗巴县| 常德市| 原阳县| 瑞丽市| 邵东县| 科技| 都昌县| SHOW| 博罗县| 衢州市| 漯河市| 香港 | 邓州市| 苏尼特右旗| 拜泉县|