右值

右值

左值與右值在C/C++中表示位於賦值運算符兩側的兩個值,賦值號左邊的就叫左值(left-value),右邊的就叫右值(right-value)。比如:(1) int b = 3;(2) int a = b;第(2)行代碼,a為左值,b為右值。不過現在的左值與右值的含義有了更深層次的含義:

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.

內容介紹


左值(lvalue)和右值(rvalue)最先來源於編譯。在C語言中表示位於賦值運算符兩側的兩個值,左邊的就叫左值,右邊的就叫右值。
它們的定義是:
左值,指的是如果一個表達式可以引用到某一個對象,並且這個對象是一塊內存空間且可以被檢查和存儲,那麼這個表達式就可以作為一個左值。
右值,指的是引用了一個存儲在某個內存地址里的“數據”。
從上面的兩個定義可以看出,左值其實要引用一個對象,而一個對象在我們的程序中又肯定有一個名字或者可以通過一個名字訪問到,所以左值又可以歸納為:左值表示程序中必須有一個特定的名字引用到這個值。而右值引用的是地址里的內容,所以相反右值又可以歸納為:右值表示程序中沒有一個特定的名字引用到這個值除了用地址
在《C專家編程(中文版)》中第4章,對左值和右值的基本描述。
而右值則是只可以放在賦值操作符右邊的值,比如:
int a = 0;
char *b = "hello";
3 = a; // ERROR
"howdy" = b // ERROR
這裡3和"howdy"都是右值,所以不能放在賦值操作符左邊,一切常數、字元和字元串都是右值。