C 中的左值和右值

2021-09-25 20:27:25 字數 1079 閱讀 4171

給出乙個關於左值和右值的嚴格定義還是比較困難的,不過為了你快速的理解,你可以這麼認為:

c語言中,lvalue 是乙個可以出現在賦值的左側或右側的表示式 ,而 rvalue 是乙個只能出現在賦值的右側的表示式。 比如說:

int a = 42;

int b = 43;

// a and b are both l-values:

a = b; // ok

b = a; // ok

a = a * b; // ok

// a * b is an rvalue:

int c = a * b; // ok, rvalue on right hand side of assignment

a * b = 42; // error, rvalue on left hand side of assignment

c++中,由於一些微妙的原因,上述的定義還不夠準確,當然那個也是主要的判斷方式。不過我們還可以認為,左值是乙個表示式,引用乙個記憶體位置,並允許我們通過 & 運算子獲取該記憶體位置的位址。 而右值是乙個不是左值的表示式。 例子如下:

// lvalues:

int i = 42;

i = 43; // ok, i is an lvalue

int* p = &i; // ok, i is an lvalue

int& foo();

foo() = 42; // ok, foo() is an lvalue

int* p1 = &foo(); // ok, foo() is an lvalue

// rvalues:

int foobar();

int j = 0;

j = foobar(); // ok, foobar() is an rvalue

int* p2 = &foobar(); // error, cannot take the address of an rvalue

j = 42; // ok, 42 is an rvalue

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 ...