如何解析C++左值與右值之間共同與不同點(diǎn)

這篇文章將為大家詳細(xì)講解有關(guān)如何解析C++左值與右值之間共同與不同點(diǎn),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

我們提供的服務(wù)有:網(wǎng)站建設(shè)、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、平塘ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的平塘網(wǎng)站制作公司

C++編程語言與C語言相比有很多不同之處,而且這些不同的地方有都體現(xiàn)著非常重要的作用。

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

變量和文字常量都有存儲區(qū),并且有相關(guān)的類型,區(qū)別在于變量是可尋址的;

對于每個(gè)變量,都有2個(gè)值與其相關(guān)聯(lián):

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

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

2 . C++左值與右值的相關(guān)問題

給表達(dá)式加上括號: ++a--

結(jié)果 ++(a--)

這個(gè)表達(dá)式是非法的,因?yàn)榍霸隽坎僮饕笠粋€(gè)可修改的左值,而 "a--" 不是左值(即右值)

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

早期的c語言教材,for循環(huán)語句通常寫成:

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

而現(xiàn)在多為:

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

兩者有區(qū)別嗎?

a++ 即是返回 a的值,然后變量 a 加 1,返回需要產(chǎn)生一個(gè)臨時(shí)變量類似于

{   int temp = a;   aa=a+1;   return temp; //返回右值   }

++a 則為:

{   aa=a+1;   return &a; //返回左值   }

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

C++左值與右值的含義與誤區(qū)

術(shù)語 “L-Values” 和 “R-Values” 是很容易被搞混的,因?yàn)樗鼈兊臍v史淵源也是混淆。他們最初起源是編譯器的設(shè)計(jì)者,從字面上來理解就是表達(dá)式左邊的值和表達(dá)式右邊的值。它們的含義一直在演化而名字卻沒變,現(xiàn)在已經(jīng)“名”不副“實(shí)”了。雖然還是稱為left-value 和right-value,但是他們的含義已經(jīng)大大不同了。

C++ 03 標(biāo)準(zhǔn)上是這樣寫的: “每一個(gè)表達(dá)式要么是一個(gè) lvalue,要么就是一個(gè) rvalue。”

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

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

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

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

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

關(guān)于如何解析C++左值與右值之間共同與不同點(diǎn)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

新聞標(biāo)題:如何解析C++左值與右值之間共同與不同點(diǎn)
分享URL:http://muchs.cn/article42/jcpiec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作虛擬主機(jī)、網(wǎng)站維護(hù)網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)