程式設計 微知識(一) Lvalues 和 Rvalues

每個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