• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            積木

            No sub title

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            轉載自:http://developer.51cto.com/art/201002/182799.htm

             

            C++左值與右值之間共同與不同點解析

            2010-02-03 17:32 佚名 博客園 我要評論(1) 字號:T | T
            一鍵收藏,隨時查看,分享好友!

            C++左值與右值都有哪些不同之處,又有哪些聯系呢?我們將會通過對這篇文章的介紹,為大家詳細講解有關內容,幫助大家理解。

            AD: 2013大數據全球技術峰會低價搶票中

            C++編程語言與C語言相比有很多不同之處,而且這些不同的地方有都體現著非常重要的作用。現在我們將會為大家詳細介紹一下有關C++左值與右值之間的一些聯系,希望能幫助大家對這一語言有一個深刻的認識。

             

            1. C++左值與右值概念

            變量和文字常量都有存儲區,并且有相關的類型,區別在于變量是可尋址的;

            對于每個變量,都有2個值與其相關聯:

            1>數據值,存儲在某個內存地址中,也稱右值(rvalue),右值是被讀取的值(read value),文字常量和變量都可被用于右值。

            2>地址值,即存儲數據值的那塊內存地址,也稱左值(lvalue),文字常量不能被用作左值。

            2 . C++左值與右值的相關問題

            給表達式加上括號: ++a--

            結果 ++(a--)

            這個表達式是非法的,因為前增量操作要求一個可修改的左值,而 "a--" 不是左值(即右值)

            3 . C++左值與右值中前增量和后增量的區別

            早期的c語言教材,for循環語句通常寫成:

            for(int i=0;i<10;i++)

            而現在多為:

            for(int i=0;i<10;++i)

            兩者有區別嗎?

            a++ 即是返回 a的值,然后變量 a 加 1,返回需要產生一個臨時變量類似于

            1. {
            2. int temp = a;
            3. aa=a+1;
            4. return temp; //返回右值
            5. }

             

            ++a 則為:

            1. {
            2. aa=a+1;
            3. return &a; //返回左值
            4. }

             

            顯然,前增量不需要中間變量,效率更高。

            C++左值與右值的含義與誤區

            術語 “L-Values” 和 “R-Values” 是很容易被搞混的,因為它們的歷史淵源也是混淆。他們最初起源是編譯器的設計者,從字面上來理解就是表達式左邊的值和表達式右邊的值。它們的含義一直在演化而名字卻沒變,現在已經“名”不副“實”了。雖然還是稱為left-value 和right-value,但是他們的含義已經大大不同了。

            C++ 03 標準上是這樣寫的: “每一個表達式要么是一個 lvalue,要么就是一個 rvalue。”

            記住,lvalue和rvalue是針對表達式而言的。

            lvalue 是指那些單一表達式結束之后依然存在的持久對象。例如: obj,*ptr, prt[index], ++x 都是 lvalue。

            rvalue 是指那些表達式結束時(在分號處)就不復存在了的臨時對象。例如:1729 , x + y , std::string("meow") , 和 x++ 都是 rvalue。

            ++x 和 x++ 的區別的語義上的區別: 當寫 int i = 10 ; 時, i 是一個 lvalue,它實際代表一個內存里的地址,是持久的。 表達式 ++x 也是一個 lvalue,它修改了 x 的值,但還是代表原來那個持久對象。但是,表達式 i++ 卻是一個 rvalue,它只是拷貝一份i的初值,再修改i的值,最后返回那份臨時的拷貝,那份拷貝是臨時對象。 ++i 和 i++ 都遞增i,但 ++i 返回i本身,而 i++ 返回臨時拷貝。這就是為什么 ++i 之所以是一個 lvalue,而 i++ 是一個 rvalue。

            lvalue 與 rvalue 之分不在于表達式做了什么,而在于表達式代表了什么(持久對象或臨時產物)。 判斷一個表達式是不是 lvalue 的直接方法就是“能不能對表達式取址?”,如果能夠,那就是一個 lvalue;如果不能,那就是一個 rvalue。

            以上就是我們為大家介紹的有關C++左值與右值的相關介紹。

            【責任編輯:曹凱 TEL:(010)68476606】
            posted on 2013-03-04 23:12 Jacc.Kim 閱讀(316) 評論(0)  編輯 收藏 引用 所屬分類: VC / C++
            久久天天躁夜夜躁狠狠躁2022| 久久综合久久综合九色| 国内精品久久久久影院老司| 2021国产精品久久精品| 久久精品国产69国产精品亚洲| 国产成人综合久久久久久| 久久久久亚洲AV无码专区首JN| 国产精品美女久久久久久2018| 久久精品国产一区二区| 亚洲精品无码久久久影院相关影片| 久久免费精品视频| 日韩精品久久无码人妻中文字幕 | 久久A级毛片免费观看| 一本久久a久久精品综合夜夜 | 99久久精品国产一区二区蜜芽| 日本高清无卡码一区二区久久| 久久国产热精品波多野结衣AV| 日本国产精品久久| 国产亚州精品女人久久久久久 | 伊人久久精品影院| 久久91这里精品国产2020| www.久久99| 久久精品国产亚洲AV无码偷窥| 久久婷婷是五月综合色狠狠| 韩国三级中文字幕hd久久精品 | 久久人妻无码中文字幕| 狠狠色丁香婷婷综合久久来来去 | 国产精品天天影视久久综合网| 伊人久久久AV老熟妇色| 久久香综合精品久久伊人| 午夜视频久久久久一区| 久久中文字幕无码专区| 国产成人无码精品久久久免费| 国产99久久久国产精品~~牛| 99精品久久精品一区二区| 97久久久久人妻精品专区| 久久综合香蕉国产蜜臀AV| 日韩乱码人妻无码中文字幕久久| 亚洲AV日韩精品久久久久久久| 久久久久久亚洲精品成人| 国产精品久久久久国产A级|