先介紹幾個概念:
1 、與數據對象相關的值有兩種:
n???????? 數據值
即存儲在某個內存地址中的數據本身。
n???????? 地址值
即該數據對象的存儲位置。
2 、 lvalue 與 rvalue
n???????? lvalue 通常指的是可以尋址并且可以對該地址內容存儲的對象進行寫操作 (writeable) ??梢钥醋?/span> location value 。
n???????? rvalue 通常指的是那些能夠提供數據值的數據,即從某個 mem 中讀出的 value ??梢哉J為是 read value 。
3 、文字常量( literate const )與變量( variable )
n???????? 文字常量
即通常指的數字( 1 , 200 ,。。。)。該數據對象分配在常量內存區域,不可以尋址,也就是不可以通過操作它的地址值來變更的數據對象。因此不能作為 lvalue 出現,只能是 rvalue
n???????? 變量
可以尋址。通過變量名就可以改變該數據地址的內容。所以可以成為 lvalue 、 rvalue
總結:
u?????? lvalue :可以通過數據對象自身地址來改變數據對象值的數據對象,要求該對象可以尋址。
u?????? rvalue :能夠提供數據對象本身數值的數據對象,該對象不一定可以尋址
u?????? 由操作符決定需要什么類型的數據值類型
注意:
lvalue 中的 ’l’ 不是 left 的意思,既不是指在操作符左邊。同樣 ’r’ 不是 right
?????? 例如:
x++;
?????? ++x;
?????? 兩個表達式均要求 x 是 lvalue 。
使用舉例:
①.???? 0=1 ; ??????????? //error, 0 不是 lvalue
②.???? x+0.1*y=z;???? //error, 在賦值運算符左邊的應該為 lvalue
③.???? const int size=4;
size=10;???????? //error, 數據對象地址內容不可以改變,即不是 writeable


