左值右值基本信息
C/C++語言中可以放在賦值符號左邊的變數,即具有對應的可以由用戶訪問的存儲單元,並且能夠由用戶去改變其值的量。左值表示存儲在計算機記憶體的對象,而不是常量或計算的結果。或者說左值是代表一個記憶體地址值,並且通過這個記憶體地址,就可以對記憶體進行讀並且寫(主要是能寫)操作;這也就是為什麼左值可以被賦值的原因了。相對應的還有右值:當一個符號或者常量放在操作符右邊的時候,計算機就讀取他們的“右值”,也就是其代表的真實值。簡單來說就是,左值相當於地址值,右值相當於數據值。右值指的是引用了一個存儲在某個記憶體地址里的數據。案例列舉
比如: int ia,ib;ib=0;
ia=ib;
在這裡,首先定義ia,ib。然後對ib賦值,此時計算機取ib的左值,也就是這個符號代表的記憶體位置即記憶體地址值,計算機取0的右值,也就是數值0;然後給ia賦值為ib,此時取ib的右值給ia的左值;
所以說,ib的左值、右值是根據他的位置來說的;
這也算是形式語言的一個有意思之處吧。
套用注意
左值右值翻譯可能有些問題。L-value中的L指的是Location,表示可定址。Avalue (computer science)that has an address.
R-value中的R指的是Read,表示可讀。in computer science, a value that does not have an address in a computer language.
左值和右值是相對於賦值表達式而言的。左值是能出現在賦值表達式左邊的表達式。左值表達式可以分為可讀寫的左值和唯讀左值。右值是可以出現在賦值表達式右邊的表達式,他可以是不占據記憶體空間的臨時量或字面量,可以使(還是《是》)不具有寫入權的空間實體。如
int a=3;
const int b=5;
a=b+2; //a是左值,b+2是右值
b=a+2; //錯!b是唯讀的左值但無寫入權,不能出現在賦值符號左邊
(a=4)+=28; //a=4是左值表達式,28是右值,+=為賦值操作符
34=a+2; //錯!34是字面量不能做左值