左值意思

在C++程式語言中,左值(lvalue)和右值(rvalue)是兩個重要的概念,它們用於區分表達式如何被使用和它們如何被求值。

左值是指一個可以出現在賦值操作符的左側的表達式,也就是說,它可以用來存儲一個新的值。左值通常表示一個變數、一個數組元素、一個函式調用或者是一個複合的賦值表達式。例如:

int a = 10; // 'a' 是一個左值,因為它可以出現在賦值操作符的左側
int b = a; // 'a' 在這裡也是左值,因為它被賦給了 'b'

右值是指一個只能出現在賦值操作符的右側的表達式,也就是說,它不能用來存儲新的值。右值通常表示一個臨時值,比如一個字面量、一個函式返回值或者是一個表達式。例如:

int a = 10; // 10 是一個右值,因為它只能出現在賦給 'a' 的賦值操作符的右側
int b = a + 1; // a + 1 也是一個右值,因為它是一個表達式

在C++11標準引入了右值引用(rvalue reference)後,右值的定義變得更加複雜。現在,一個右值可以是一個真正的右值(prvalue,Pure rvalue),也可以是一個將亡值(xvalue,eXpiring value),後者是指那些必須被移動而非複製(因為它們有有效的資源可以移動)的右值。

左值和右值的區別對於理解C++的性能最佳化(比如移動語義和完美轉發)以及一些高級特性(比如decltype關鍵字如何推斷類型)非常重要。