C 左值 右值 右值引用

2022-02-11 01:19:06 字數 773 閱讀 5933

一般意義上的左值(lvalue)和右值(rvalue)

* lvalue 代表了物件,可通過取位址符獲取位址,可賦值。l 可看做 location。

* rvalue 代表了資料,不能獲取記憶體位址,不可賦值。

* rvalue 不能當做 lvalue,但 lvalue 可以當做 rvalue。

* int a=0;int b=1; a=b; // b是個lvalue,可以當做rvalue。

《c++ primer》:

* lvalue 代表了物件的身份。

* rvalue 代表了物件的值。

* 左值持久,右值短暫。

右值引用 / rvalue reference

右值引用的特點

* c++11引入,為了支援移動操作(移動建構函式)。

* 必須繫結到右值的引用稱作右值引用,使用 t&& 作為型別。

* 只能繫結到乙個即將銷毀的物件。

* 右值引用和引用一樣,也是乙個物件的另乙個名字而已。

* 右值引用必須繫結到乙個返回右值的表示式,而左值引用恰恰相反(注意:const的左值引用也可以繫結到右值表示式上)。

變數均是左值

int&& rr1 =1 ; // rr1 是乙個變數,同時也是乙個右值引用型別

int&& rr2 = rr1; // 錯誤。右值引用不能繫結到乙個左值上。即,乙個右值引用物件不能繫結到另外乙個右值引用物件上。

std::move()函式可將乙個左值變成右值引用。

c 左值 右值 右值引用 左值引用

c 裡一切值必須屬於左值 右值兩者之一。左值 一切變數 包括用const修飾的變數 物件 包括引用都屬於左值 右值 一切字面值 可以是巨集 臨時無名物件 函式返回值 表示式 如a n 說明一下 函式返回值,返回的是某乙個型別的值,並不是返回變數。左值並不是說能放在 左邊的值就是左值 雖然用const...

c 左值 右值 左值引用 右值引用

在c語言中,左值認為是賦值語句的左側,右值認為是賦值語句的右側。在c 中,意義稍有不同。c 中,每乙個表示式會產生乙個左值或者右值,相應的,該表示式也就被稱作 左值表示式 右值表示式 乙個左值表示式的求值結果是乙個物件或者是乙個函式。左值可以當右值使用,而右值不能當左值使用。c prime 中這麼簡...

C 左值 右值 左值引用 右值引用

就變數而言,對於一些變數,我們只會讀取並使用它們的值,而不會改變他們的值 唯讀 對於其餘的變數,我們既會讀取它們的值,有的時候還會改變它們的值 讀寫 這是很常見的。在c 中,前一種變數稱為右值,後一種變數稱為左值,例如 int a 1 a是左值,1是右值稍稍不同的一點是,在c 中,乙個變數是左值還是...