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

EasyC++?右值引用

 更新時(shí)間:2021年12月17日 08:45:51   作者:梁唐  
這篇文章主要介紹了C++?右值引用,右值引用指的是以引用傳遞(而非值傳遞)的方式使用?C++?右值,下面文章將對此詳細(xì)介紹,需要的朋友可以參考一下,希望對你有所幫助

文章轉(zhuǎn)自:公眾號:Coder梁(ID:Coder_LT)

1.左值和右值

在我們之前的文章當(dāng)中,介紹的都是左值引用。C++11在左值引用的基礎(chǔ)上推出了右值引用,由于是新特性,加上使用的頻率也不是很高,有一定的學(xué)習(xí)成本。

我們先把引用這個(gè)概念拋開,先來看看什么是左值什么是右值。其實(shí)很簡單,左值可以取地址,位于等于號的左側(cè)。而右值沒辦法取地址,位于等于號的右側(cè)。

int a = 4;


比如我們定義了一個(gè)int型的變量a,讓它的值等于4。其中a位于等于號的左側(cè),并且我們可以求a的地址。而4位于等于號的右側(cè),我們沒有辦法對4取地址。所以a是左值,4是右值。

再比如:

int test() {
    return 4;
}

int a = test();


同樣,a位于等于號的左側(cè),有辦法取地址是個(gè)左值。而test()是一個(gè)臨時(shí)值沒辦法取地址,是個(gè)右值。

所以到這里就比較清楚了,有地址的變量就是左值,沒有地址的常量值、臨時(shí)變量就是右值。

2.左值引用和右值引用

明白了左值、右值的概念再來看看左值引用、右值引用就簡單了。左值引用顧名思義就是能夠指向左值不能指向右值的引用。

int a = 4;
int &b = a;  // 合法
int &c = 4;  // 非法


但是左值引用也有例外,就是使用const修飾的左值引用是可以指向右值的:

const int &b = 4;


因?yàn)閏onst修飾的引用無法再更改,所以可以指向右值。如果大家度過STL代碼的話,會(huì)發(fā)現(xiàn)其中一些函數(shù)的入?yún)⑹莄onst &目的就是為了能夠兼容傳參是常量的情況。比如vector當(dāng)中的push_back

void push_back (const value_type& val);


右值引用和左值引用的概念類似,也就是能夠指向右值但不能指向左值的引用。為了和左值引用區(qū)別, 使用&&也就是兩個(gè)&符。老實(shí)講這個(gè)符號很令人費(fèi)解,因?yàn)樗?code>and的含義相同。

int a = 4;
int &&b = 4; // 合法
int &&c = a; // 非法


上面第三行代碼非法的原因是c是一個(gè)右值引用,它不能指向左值。如果我們非要指向呢?也不是沒有辦法,可以使用std::move函數(shù),它可以將一個(gè)左值轉(zhuǎn)換成右值。

using namespace std;
int a = 4;
int &&c = move(a);


move函數(shù)聽起來似乎是移動(dòng)的意思,但其實(shí)它并沒有移動(dòng)變量,只不過做了一個(gè)類似于類型轉(zhuǎn)換的操作。

不知道大家看到這里有沒有覺得頭大,其實(shí)還沒有結(jié)束,還有一點(diǎn)很重要。即左值引用和右值引用這兩者本身都是左值引用:

void test(int && tmp) {
    tmp = 2333;
}

using namespace std;

int a = 4;
int &b = a;
int &&c = 4;

test(a); // 非法
test(b); // 非法
test(c); // 非法
test(move(a));// 合法
test(move(b));// 合法
test(move(c));// 合法

C++中的引用是一個(gè)非常大的范疇,除了左值引用、右值引用之外還有非常多的細(xì)節(jié)。比如萬能引用、引用折疊、完美轉(zhuǎn)發(fā)等……

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

相關(guān)文章

  • C語言中static與extern關(guān)鍵字的深入解析

    C語言中static與extern關(guān)鍵字的深入解析

    在C語言編程中,static和extern是兩個(gè)非常重要的關(guān)鍵字,它們各自有著獨(dú)特的用途,本文將深入探討這兩個(gè)關(guān)鍵字的工作原理、底層實(shí)現(xiàn)機(jī)制以及在實(shí)際開發(fā)中的應(yīng)用,感興趣的小伙伴跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • C語言中計(jì)算函數(shù)執(zhí)行時(shí)間的三種方式

    C語言中計(jì)算函數(shù)執(zhí)行時(shí)間的三種方式

    本文主要介紹了C語言中計(jì)算函數(shù)執(zhí)行時(shí)間的三種方式,主要包括clock(),timeb和time,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • C/C++編譯報(bào)錯(cuò)printf was not declared in this scope問題及解決

    C/C++編譯報(bào)錯(cuò)printf was not declared in 

    這篇文章主要介紹了C/C++編譯報(bào)錯(cuò)printf was not declared in this scope問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 深入C中常用的三種排序方法總結(jié)以及探討分析

    深入C中常用的三種排序方法總結(jié)以及探討分析

    本篇文章是對C中常用的三種排序方法總結(jié)以及探討分析的概述,需要的朋友參考下
    2013-05-05
  • Linux UDP服務(wù)端和客戶端程序的實(shí)現(xiàn)

    Linux UDP服務(wù)端和客戶端程序的實(shí)現(xiàn)

    這篇文章主要介紹了Linux UDP服務(wù)端和客戶端程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C++深入刨析muduo中的抽象類Poller

    C++深入刨析muduo中的抽象類Poller

    muduo網(wǎng)絡(luò)庫中Poller類是一個(gè)抽象類,用戶使用PollPoller或者EPollPoller類,下面跟隨小編一起來詳細(xì)了解一下
    2022-04-04
  • C++解析特殊符號tab、換行符號實(shí)例代碼

    C++解析特殊符號tab、換行符號實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于C++解析特殊符號tab、換行符號的相關(guān)資料,這個(gè)功能在我們?nèi)粘i_發(fā)中經(jīng)常會(huì)遇到,需要的朋友可以參考下
    2021-05-05
  • C語言封裝函數(shù)字符串練習(xí)匯總分享

    C語言封裝函數(shù)字符串練習(xí)匯總分享

    這篇文章主要介紹了C語言封裝函數(shù)字符串練習(xí)匯總分享,分享內(nèi)容有字符串查找、字符串拼接、字符串轉(zhuǎn)整數(shù)等內(nèi)容,需要而小伙伴可以參考一下
    2022-03-03
  • C語言指針之必須要掌握的指針基礎(chǔ)知識

    C語言指針之必須要掌握的指針基礎(chǔ)知識

    這篇文章主要介紹了C語言指針必須要掌握的基礎(chǔ)知識,文中實(shí)例講解的很清晰,有不太懂的同學(xué)可以研究下,希望能夠給你帶來幫助
    2021-09-09
  • C語言由淺入深講解文件的操作上篇

    C語言由淺入深講解文件的操作上篇

    C語言具有操作文件的能力,比如打開文件、讀取和追加數(shù)據(jù)、插入和刪除數(shù)據(jù)、關(guān)閉文件、刪除文件等。與其他編程語言相比,C語言文件操作的接口相當(dāng)簡單和易學(xué)
    2022-04-04

最新評論

南阳市| 淮南市| 万安县| 靖西县| 古浪县| 五常市| 梅州市| 昌平区| 遵化市| 祁连县| 开阳县| 微山县| 博乐市| 沅江市| 德保县| 东丰县| 武山县| 辰溪县| 通州区| 资溪县| 威信县| 宁河县| 浠水县| 华容县| 苗栗市| 河池市| 高陵县| 宜兰县| 苏尼特左旗| 内黄县| 城步| 滦平县| 太谷县| 苏尼特左旗| 内黄县| 黔西县| 册亨县| 江口县| 色达县| 桂林市| 饶河县|