亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中move的使用及說明

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

C++ move使用

move作用主要可以將一個左值轉換成右值引用,從而可以調用C++11右值引用的拷貝構造函數,在對象拷貝的時候,在運行時,它們不會產生一行代碼原先的對象也會清空, 可以減少資源創(chuàng)建和釋放。

作為可以歸納為以下幾點

1、std::move函數可以以非常簡單的方式將左值引用轉換為右值引用。

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

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

4、std::move是將對象的狀態(tài)或者所有權從一個對象轉移到另一個對象,只是轉移,沒有內存的搬遷或者內存拷貝。

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

打個比方,就好比說一個房產,原來登記在張三名下,“張三”就是地址。張三也有管理權。move就相當于過戶。過戶給李四后,“李四”就是這個房子的“地址”,管理權自然也交接給了李四。

C++move函數詳解

C++11的一個最重要特性就是支持移動語義,其中一個比較關鍵的函數就是 std::move 那這個函數的作用是什么?

首先打開庫文件 找到move的定義:

注意:不要把&&理解成引用的引用,這就是一個關鍵字

大概函數如下:

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

說白了這個函數的作用就是把傳進來的參數強制轉換成右值引用

可能有些人會有疑問,

為什么參數已經是右值引用了?

這就要說到參數推導了比如以下例子:

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

如果傳進來的是一個左值

int a = 10;
foo(a);

此時params被推導為int& 如果傳進來的是一個右值

foo(20);

此時paramas被推導為int&&

remove_reference的作用是什么?

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

也就是說std::move把你傳進來的參數所有的引用都去掉,然后在加上&&,也就是變成右值引用

remove_reference是怎么實現的?

非常簡單,首先看看定義:

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

其中remove_referenct_t 無非是一個方便的寫法 typename是為了說明 remove_reference是一個class

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C語言高級教程之變長數組詳解

    C語言高級教程之變長數組詳解

    這篇文章主要介紹了C語言中變長數組的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 如何解決C語言,函數名與宏沖突

    如何解決C語言,函數名與宏沖突

    本文介紹了“如何解決C語言,函數名與宏沖突”,需要的朋友可以參考一下
    2013-03-03
  • C 語言進制之間的轉換

    C 語言進制之間的轉換

    本篇文章主要介紹了C語言進制之間的轉換,舉例說明并附圖片,幫助大家理解,希望對大家有所幫助
    2016-07-07
  • C語言超詳細分析多進程的概念與使用

    C語言超詳細分析多進程的概念與使用

    在一個項目中并發(fā)執(zhí)行任務時多數情況下都會選擇多線程,但有時候也會選擇多進程,例如可以同時運行n個記事本編輯不同文本,由一個命令跳轉到另外一個命令,或者使用不同進程進行協作
    2022-08-08
  • C語言解決青蛙跳臺階問題(升級版)

    C語言解決青蛙跳臺階問題(升級版)

    所謂的青蛙跳臺階問題,就是指一只青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。本文將用C語言解決這一問題,需要的可以參考一下
    2022-01-01
  • VC基于ADO技術訪問數據庫的方法

    VC基于ADO技術訪問數據庫的方法

    這篇文章主要介紹了VC基于ADO技術訪問數據庫的方法,較為詳細的分析了VC使用ADO操作數據庫的相關實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • C++學習心得之掃雷游戲

    C++學習心得之掃雷游戲

    這篇文章主要為大家詳細介紹了C++學習心得之掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言實現圖書管理系統(tǒng)

    C語言實現圖書管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言通過二分查找實現猜數字游戲

    C語言通過二分查找實現猜數字游戲

    這篇文章主要為大家詳細介紹了在C語言中如何通過二分查找思想編寫一個簡單的猜數字游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-02-02
  • c++中const的使用詳解

    c++中const的使用詳解

    本篇文章是對c++中的const的應用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論