在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是左值、右值呢?左右值和左右值引用

冬至子 ? 來源:iDoitnow ? 作者:艱默 ? 2023-07-18 15:39 ? 次閱讀

1. 左右值和左右值引用

什么是左值、右值呢? 一種極不嚴謹的理解為:在賦值的時候,能夠被放到等號左邊的值為左值,放在右邊的值為右值。例如:

int sum(int x, int y){return x + y;}

int a = 1;        //a為左值,常數1為右值
int b = a + a;    //b為左值,表達式a+a為右值
int c = sum(a, a);//c為左值,但函數sum(a, a)返回值為右值

通過上面的例子,常數a、表達式(a+a)和函數sum(a+a)返回值他們都是臨時值,這些值都保存在寄存器中,無法取到他們的地址;而對于abc為具體的變量名,存儲在內存中,可以取到其地址。因此一般情況下可以根據能否取到地址,來區分左值和右值。

在了解左值和右值之前,我們首先要知道表達式的概念: 由運算符和運算對象構成的計算式(類似數學中的算術表達式) 。表達式是可以求值的,因此根據表達式值的類別,可以對其進行分類(準確的來說,是表達式的結果的值類別,但我們一般不刻意區分表達式和表達式的求值結果,所以這里稱“表達式的值類別”。),C++11之后將表達式定義了五種類型:

  • lvalue (Left-hand-side value,左值)
  • prvalue (Pure rvalue,純右值)
  • xvalue (eXpiring value,將亡值)
  • rvalue (Right-hand-side value,右值)
  • glvalue (Generalized lvalue,泛左值)

它們之間的關系如下圖所示:

圖片

C++11中將表達式按值類別可以分為 左值將亡值純右值 。其中,左值和將亡值合稱為泛左值,純右值和將亡值合稱為右值。

隨著移動語義(后面我們會詳細介紹)引入到 C++11 之中,值類別被重新進行了定義,C++之父Bjarne Stroustrup在《“New” Value Terminology》中給出以區別表達式的兩種獨立的性質:

  • 擁有身份 (identity):可以確定表達式是否與另一表達式指代同一實體,例如通過比較它們所標識的對象或函數的(直接或間接獲得的)地址;
  • 可被移動 :移動構造函數、移動賦值運算符或實現了移動語義的其他函數重載能夠綁定于這個表達式。

C++11 中:

  • 擁有身份且不可被移動的表達式被稱作 左值 (lvalue)表達式;
  • 擁有身份且可被移動的表達式被稱作將****亡值 (xvalue)表達式;
  • 不擁有身份且可被移動的表達式被稱作 純右值 (prvalue)表達式;

1.1 左值

一般情況下,左值我們可以簡單地理解理解為: 能夠使用&取地址的表達式

常見的左值有:

  • 變量名
  • 函數名
  • 返回左值引用的函數調用
  • 前置自增/減的運算符鏈接的表達式(如++i/--i
  • 內置的賦值表達式(如a=b,a+=1
  • 字符串等。

:字符串是可以取地址的,因此字符串常量也屬于左值】

1.2 純右值

純右值:表達式本身就是純粹的字面值(如1ture1.0);或者,該表達式求值結果相當于一個字面值或一個不具名的臨時對象。

常見的純右值有:

  • 除字符串字面值以外的字面值
  • 返回非引用類型的函數調用
  • 后置自增/減的運算符鏈接的表達式(如i++/i--
  • 算術/邏輯/比較表達式(如a+ba&&ba==b
  • 取地址表達式(如&a

1.3 將亡值

將亡值是在C++11中引進來的,顧名思義,就即將銷毀的東西。將亡值的產生與右值引用的產生而引起的,對于將亡值我們常用到的有:

  • 返回類型是右值引用的函數調用或重載運算符的表達式(如std::move(x)
  • 轉換為右值引用的轉換函數的調用表達式(如static(a)

1.4 左右值引用

左值引用就是對左值的引用。它的形式如:T&,根據const屬性可以分為兩種:

  • const左值引用
  • 非const左值引用

例如:

int a = 1;
int& la = a;//la為a的左值引用(非const左值引用)
la = 2;//la為非const左值引用,可以修改它的值

const int& c_la = a;//c_la為a的左值引用(const左值引用)
c_la = 2;//該語法錯誤,c_la為const左值引用,不可以修改它的值

右值引用就是對右值的引用,通過T&&來表示。右值的引用只能綁定到右值上。

2. 移動語義

在未出現右值引用之前,我們在函數調用傳參的時候,在某些時候可以使用按引用傳遞參數,減少參數多的拷貝對資源的消耗,提高程序的運行效率。當我們在處理包含大量數據的對象時,移動語義顯的尤為重要。

2.1 std::move

如何將一個左值轉換為一個右值呢?C++11在頭文件utility中聲明了std::move()函數,該函數的作用就是類型轉換,通過它,我們可以 把一個左值,將其標記為右值。move()不做任何資源轉移的操作,只是產生一個將亡值表達式來標識參數x,其完全等同于static_cast(x)。例如:

int a = 1;
int&& r_a = a; //錯誤,右值引用只能綁定到右值上,而a是一個左值
int&& r_a = std::move(b); //正確, std::move(a) 是一個右值,可以用右值引用綁定

2.2 移動構造函數

一個類 T 的首個形參是 T&&、const T&&volatile T&&const volatile T&&,且沒有其他形參,或剩余形參都有默認值。

具體的形式如下:

T (T &&) //移動構造函數的典型聲明形式
T (T &&) = default; //強制編譯器生成移動構造函數。
T (T &&) = delete; //避免隱式生成移動構造函數。

示例:

#include < string >
#include < iostream >
#include < utility >

class A
{
    private:
    std::string s;
    public:
    A(std::string str = "A()") : s(str) {std::cout<

2.3 移動賦值運算符

一個類 T 的移動賦值運算符是名為 operator=的非模板非靜態成員函數,它接受恰好一個 T&&const T&&volatile T&&const volatile T&& 類型的形參。

具體的形式如下:

T & T ::operator= (T &&) //移動賦值運算符的典型聲明
T & T ::operator= (T &&) = default; //強制編譯器生成移動賦值運算符
T & T ::operator= (T &&) = delete; //避免隱式移動賦值

示例:

#include < string >
#include < iostream >
#include < utility >
 
class A
{
    private:
    std::string s;
    public:
    A(std::string str = "A()") : s(str) {std::cout<
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 轉換器
    +關注

    關注

    27

    文章

    8728

    瀏覽量

    147444
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7009
收藏 人收藏

    評論

    相關推薦

    什么是有效?有效是什么意思?

    什么是有效?有效是什么意思? 有效----在兩個相同的電阻器件中,分別通過直流電和交流電,如果經過同一時間
    發表于 04-17 10:31 ?1.8w次閱讀

    箱體的Q,箱體的Q是什么意思

    箱體的Q,箱體的Q是什么意思 一,Qtc: 音箱全系統的總Q, 二,箱體的損耗Q
    發表于 03-31 13:47 ?5077次閱讀

    光圈/F/4K是什么意思

    光圈/F/4K是什么意思 光圈/F 鏡頭的透光能力。F是物鏡焦距(EFL)與入射光瞳周長(D)的
    發表于 04-10 13:42 ?2927次閱讀

    音箱系統Q

    一,Qtc:  音箱全系統的總Q, 二,箱體的損耗Q: Ql-泄漏損耗Q. 由箱體及單元密封不好造成泄漏產
    發表于 10-24 15:17 ?1.3w次閱讀

    電容的Q和D是什么?Q和D有什么作用?

    選擇電感電容時特別關注他們的Q,那什么是Q?Q是什么意思,它為什么重要?
    的頭像 發表于 09-13 14:16 ?7.7w次閱讀
    電容的Q<b class='flag-5'>值</b>和D<b class='flag-5'>值</b>是什么?Q<b class='flag-5'>值</b>和D<b class='flag-5'>值</b>有什么作用?

    、傳址、傳引用的區別,哪個更高效?

    、傳址、傳引用的區別,哪個更高效?
    的頭像 發表于 06-29 15:05 ?6422次閱讀

    基于權和基于夏普利的圖像酬勞分配機制

    基于權和基于夏普利的圖像酬勞分配機制
    發表于 06-24 15:35 ?43次下載

    C++基礎語法中的引用、封裝和多態

    本期是C++基礎語法分享的第六節,今天給大家來分享一下: (1)引用; (2)宏; (3)成員初始化列表; (4)封裝; (5)繼承; (6)多態; 引用
    的頭像 發表于 09-12 09:58 ?1327次閱讀

    一文帶你了解電容的Q和D

    在做射頻的時候,選擇電感電容時特別關注他們的Q,那什么是Q?Q是什么意思,它為什么重要? 品質因數Q:表征一個儲能器件(如電感線圈、電容等)、諧振電路所儲能量同每周損耗能量之比
    發表于 02-11 10:47 ?5次下載
    一文帶你了解電容的Q<b class='flag-5'>值</b>和D<b class='flag-5'>值</b>

    EMI讀數是以QP還是PK為準

    EMI讀數是以QP還是PK為準 ?
    的頭像 發表于 05-08 09:46 ?7839次閱讀
    EMI讀數是以QP<b class='flag-5'>值</b>還是PK<b class='flag-5'>值</b>為準

    電容的Q與D

    在做射頻的時候,選擇電感電容時特別關注他們的Q,那什么是Q?Q是什么意思,它為什么重要?
    的頭像 發表于 05-29 16:01 ?6070次閱讀
    電容的Q<b class='flag-5'>值</b>與D<b class='flag-5'>值</b>

    稚暉君剛拿了百度投資 市場估十幾億美元左右

    據報道,華為天才少年稚暉君創業項目智元機器人最近完成了第三輪融資,市場估達到了十幾億美元左右
    的頭像 發表于 05-31 16:07 ?1518次閱讀

    通友集團一體成型電感-電感的Q是什么?怎么增加Q

    通友集團一體成型電感-電感的Q是什么?怎么增加Q? 被動元件【電感器】在各類電路中的應用是十分常見的,按照不同的性質、形式或結構,分成多種類型 我們都知道電感Q越高越好,那么,
    的頭像 發表于 08-07 21:25 ?866次閱讀
    通友集團一體成型電感-電感的Q<b class='flag-5'>值</b>是什么?怎么增加Q<b class='flag-5'>值</b><b class='flag-5'>呢</b>?

    怎么知道電容的SFR是多少?如何選取不同SFR的電容

    怎么知道電容的SFR是多少?如何選取不同SFR的電容?是選取一個電容還是兩個電容? 一、什么是電容的SFR 電容的SFR是指自然電容(也可稱為串聯電容)與薄膜電容(也可稱為平行電容)的比值
    的頭像 發表于 10-23 09:52 ?1830次閱讀

    中間繼電器的動作與釋放可調嗎

    中間繼電器的動作和釋放通常是可以調整的,以滿足不同的應用需求。動作是繼電器觸發動作所需的控制電壓或電流,而釋放則是繼電器解除動作所
    的頭像 發表于 02-05 15:09 ?8825次閱讀
    主站蜘蛛池模板: www色多多| 97理论片| 加勒比在线视频| 色资源网| 91在线色| 午夜久久免费视频| 欧美又粗又硬又大久久久| 美人岛福利| 台湾毛片| 午夜爽爽性刺激一区二区视频| 黄色工厂在线播放| 欧美一级黄视频| 色播五月婷婷| 高h细节肉爽文男男| 国产真实乱xxxav| 俄罗斯小屁孩cao大人免费| 奇米影视四色7777久久精品| 日本久久黄色| 欧美专区在线播放| 男女视频在线观看免费高清观看| 一二三区在线观看| h国产| 黄色永久网站| 男人在线网站| 1v1高h肉爽文bl| 国产欧美另类第一页| 性殴美高清视频| 欧美亚洲天堂网| 第四色播日韩第一页| 天堂8在线天堂bt| 日本人xxxxxxxxxⅹ68| aaaaaa精品视频在线观看| 四虎成人免费网站在线| 色中色官网| 日本一区二区高清免费不卡| 三级理论手机在线观看视频| 美女艹逼视频| 免费看一毛一级毛片视频| 免费特黄| 有没有免费的视频在线观看| 小屁孩cao大人免费网站|