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

C++ move()函數案例詳解

 更新時間:2021年09月02日 09:59:37   作者:chengjian168  
這篇文章主要介紹了C++ move()函數案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

要了解move函數首先弄清左值引用和右值引用。

左值、左值引用、右值、右值引用

1、左值和右值的概念

        左值是可以放在賦值號左邊可以被賦值的值;左值必須要在內存中有實體;

        右值當在賦值號右邊取出值賦給其他變量的值;右值可以在內存也可以在CPU寄存器。

        一個對象被用作右值時,使用的是它的內容(值),被當作左值時,使用的是它的地址。

2、引用

        引用是C++語法做的優(yōu)化,引用的本質還是靠指針來實現(xiàn)的。引用相當于變量的別名。

        引用可以改變指針的指向,還可以改變指針所指向的值。

        引用的基本規(guī)則:

  1. 聲明引用的時候必須初始化,且一旦綁定,不可把引用綁定到其他對象;即引用必須初始化,不能對引用重定義;
  2. 對引用的一切操作,就相當于對原對象的操作。

3、左值引用和右值引用

    3.1 左值引用

         左值引用的基本語法:type &引用名 = 左值表達式;

    3.2 右值引用

        右值引用的基本語法type &&引用名 = 右值表達式;

        右值引用在企業(yè)開發(fā)人員在代碼優(yōu)化方面會經常用到。

        右值引用的“&&”中間不可以有空格。

  • std::move并不能移動任何東西,它唯一的功能是將一個左值強制轉化為右值引用,繼而可以通過右值引用使用該值,以用于移動語義。從實現(xiàn)上講,std::move基本等同于一個類型轉換:static_cast<T&&>(lvalue);
  • C++ 標準庫使用比如vector::push_back 等這類函數時,會對參數的對象進行復制,連數據也會復制.這就會造成對象內存的額外創(chuàng)建, 本來原意是想把參數push_back進去就行了,通過std::move,可以避免不必要的拷貝操作。
  • std::move是為性能而生。
  • std::move是將對象的狀態(tài)或者所有權從一個對象轉移到另一個對象,只是轉移,沒有內存的搬遷或者內存拷貝。

用法:

原lvalue值被moved from之后值被轉移,所以為空字符串. 

#include <iostream>
#include <utility>
#include <vector>
#include <string>
int main()
{
    std::string str = "Hello";
    std::vector<std::string> v;
    //調用常規(guī)的拷貝構造函數,新建字符數組,拷貝數據
    v.push_back(str);
    std::cout << "After copy, str is \"" << str << "\"\n";
    //調用移動構造函數,掏空str,掏空后,最好不要使用str
    v.push_back(std::move(str));
    std::cout << "After move, str is \"" << str << "\"\n";
    std::cout << "The contents of the vector are \"" << v[0]
                                         << "\", \"" << v[1] << "\"\n";
}

輸出:

After copy, str is "Hello"

After move, str is ""

The contents of the vector are "Hello", "Hello"

到此這篇關于C++ move()函數案例詳解的文章就介紹到這了,更多相關C++ move()函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • STL常用容器詳細解析

    STL常用容器詳細解析

    這里我們不涉及容器的基本操作之類,只是要討論一下各個容器其各自的特點STL中的常用容器包括:順序性容器(vector、deque、list)、關聯(lián)容器(map、set)、容器適配器(queue、stac)
    2013-09-09
  • c語言實現(xiàn)簡單的易語言

    c語言實現(xiàn)簡單的易語言

    在本篇內容里小編給大家整理了一篇關于c語言實現(xiàn)一個簡單的易語言的相關知識點,需要的朋友們參考下。
    2018-12-12
  • C++實現(xiàn)屏幕截圖功能

    C++實現(xiàn)屏幕截圖功能

    這篇文章主要為大家詳細介紹了C++實現(xiàn)屏幕截圖功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C#桌面應用開發(fā)實現(xiàn)番茄定時器

    C#桌面應用開發(fā)實現(xiàn)番茄定時器

    本文主要介紹了C#桌面應用開發(fā)實現(xiàn)番茄定時器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • C語言中快速排序和插入排序優(yōu)化的實現(xiàn)

    C語言中快速排序和插入排序優(yōu)化的實現(xiàn)

    這篇文章主要介紹了C語言中快速排序和插入排序優(yōu)化的實現(xiàn),包括雙向劃分快速排序方法的介紹,需要的朋友可以參考下
    2015-11-11
  • C++文件流讀寫操作詳解

    C++文件流讀寫操作詳解

    本文詳細講解了C++文件流讀寫操作的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • c語言printf實現(xiàn)同一位置打印輸出的實例

    c語言printf實現(xiàn)同一位置打印輸出的實例

    下面小編就為大家?guī)硪黄猚語言printf實現(xiàn)同一位置打印輸出的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • opencv提取水平與垂直線條

    opencv提取水平與垂直線條

    這篇文章主要為大家詳細介紹了opencv提取水平與垂直線條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言中cJSON的使用

    C語言中cJSON的使用

    JSON是一種輕量級的數據交換格式,常用于在網絡之間傳輸數據,本文主要介紹了C語言中cJSON的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • C語言判斷回文數的小例子

    C語言判斷回文數的小例子

    這篇文章主要介紹了C語言判斷回文數的小例子,有需要的朋友可以參考一下
    2014-01-01

最新評論

平乐县| 枣庄市| 海原县| 云梦县| 崇信县| 黑河市| 苗栗县| 普兰店市| 偃师市| 阳新县| 宜川县| 博湖县| 信阳市| 聂荣县| 泰来县| 常宁市| 正定县| 朝阳县| 和龙市| 建水县| 渭源县| 松滋市| 宜阳县| 吉木萨尔县| 达孜县| 临澧县| 廊坊市| 囊谦县| 萍乡市| 临颍县| 冀州市| 天镇县| 喜德县| 呼图壁县| 灌阳县| 元阳县| 天镇县| 诸暨市| 富蕴县| 英吉沙县| 昆明市|