欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

1、左值和右值的概念

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

        右值當(dāng)在賦值號右邊取出值賦給其他變量的值;右值可以在內(nèi)存也可以在CPU寄存器。

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

2、引用

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

        引用可以改變指針的指向,還可以改變指針?biāo)赶虻闹怠?/p>

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

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

3、左值引用和右值引用

    3.1 左值引用

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

    3.2 右值引用

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

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

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

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

用法:

原lvalue值被moved from之后值被轉(zhuǎn)移,所以為空字符串. 

#include <iostream>
#include <utility>
#include <vector>
#include <string>
int main()
{
    std::string str = "Hello";
    std::vector<std::string> v;
    //調(diào)用常規(guī)的拷貝構(gòu)造函數(shù),新建字符數(shù)組,拷貝數(shù)據(jù)
    v.push_back(str);
    std::cout << "After copy, str is \"" << str << "\"\n";
    //調(diào)用移動構(gòu)造函數(shù),掏空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"

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

相關(guān)文章

最新評論