每個C++運算式當中都會有所謂的左值(Lvalues)跟右值(Rvalues),左值通常指的是運算式後還保留其狀態的一個物件,通常指的是所有的變數都是左值。右值通常指的是一個運算式過後其狀態就不會被保留了,也就是一個暫時存在的數值。
本文以C++實作執行。
左值(lvalue):左值是保存在單一運算式之外的物件。您可以將左值當做具有名稱的物件。所有變數都是左值,包括不可修改的 (const) 變數。
右值(rvalue):右值是暫存值,不會在使用它的運算式之外保存。
#include <iostream>
using namespace std;
int main()
{
int x = 5 + 14;
cout << x << endl;
system("pause");
return 0;
}
這個範例當中,x是左值,因為會定義在他的運算式之外保存。5+14是右值,因為它是一個暫存值,並不會再定義他的運算式之外保存。
++x是左值,x++是右值。
可以用一個簡單的方法來檢查一段表示式是lvalue或rvalue,那就是看可不可以使用&運算元對該expression取得他的位置。
#include <iostream>
using namespace std;
int main()
{
int x = 5 + 14;
cout << x << endl;
cout << &x << endl;
/*
cout << &(5 + 14) << endl;
C2102 不可在常數上使用'&' 運算式必須是左值或函式指示項
*/
system("pause");
return 0;
}
像上個例子中 無法用 &來取得(5+14)的位置,所以可以知道是右值。然後我們可以用&來取得x的位置,所以x是左值。
有夢最美 築夢踏實
活在當下 認真過每一天
我是阿夢 也是Ace