c 中的左值和右值

2021-08-29 17:55:07 字數 694 閱讀 6625

左值、右值

在c++11中所有的值必屬於左值、右值兩者之一,右值又可以細分為純右值、將亡值。在c++11中可以取位址的、有名字的就是左值,反之,不能取位址的、沒有名字的就是右值(將亡值或純右值)。舉個例子,int a = b+c, a 就是左值,其有變數名為a,通過&a可以獲取該變數的位址;表示式b+c、函式int func()的返回值是右值,在其被賦值給某一變數前,我們不能通過變數名找到它,&(b+c)這樣的操作則不會通過編譯。

在c++11之前的版本,基本沿用了c語言之中對於左值與右值的定義,說起來也很簡單:「在c++之中的變數只有左值與右值兩種:其中凡是可以取位址的變數就是左值,而沒有名字的臨時變數,字面量就是右值」。 正是因為這兩種變數分別位於=的左右兩側,所以被命名為左值與右值。

在c++之中,使用左值去初始化物件或為物件賦值時,會呼叫拷貝建構函式或賦值建構函式。而使用乙個右值來初始化或賦值時,會呼叫移動建構函式或移動賦值運算子來移動資源,從而避免拷貝,提高效率。而將亡值可以理解為通過移動構造其他變數記憶體空間的方式獲取到的值。在確保其他變數不再被使用、或即將被銷毀時,來延長變數值的生命期。而實際上該右值會馬上被銷毀,所以稱之為:將亡值

C 中的左值和右值

1.概念變數和文字常量都有儲存區,並且有相關的型別,區別在於變數是可定址的 對於每個變數,都有2個值與其相關聯 1 資料值,儲存在某個記憶體位址中,也稱右值 rvalue 右值是被讀取的值 read value 文字常量和變數都可被用於右值。2 位址值,即儲存資料值的那塊記憶體位址,也稱左值 lva...

c 中的左值和右值

左值 lvalue 右值 rvalue 是 c c 中乙個比較晦澀的概念,有的人可能甚至沒有聽過,但這個概念到了 c 11 後卻變得十分重要,它們是理解move forward 等新語義的基礎。左值與右值這兩概念是從c中傳承而來的,在c中,左值指的是能夠出現在等號左邊及右邊的變數 表示式 右值則指的...

C 中的左值和右值

左值 lvalue 應該被解釋被location value,即可被定址的值 右值 rvalue 應該被解釋為read value,即唯讀的值,而不能被定址 這樣理解應該更為準確一點 通俗的講,左值就是能夠出現在賦值符號左面的東西,而右值就是那些可以出現在賦值符號右面的東西了。舉個很簡單的例子 a ...