lvalue、rvalue 基本概念
左值 (lvalue) : 一個佔據某個特定記憶體的值。 右值 (rvalue) : 一個 expression 結束後就消失的值。 基本上這兩個定義包含了全部的值,非左即右,非右即左。
int var = 4; // var 參數佔據記憶體 = lvalue
4 = var; // 4 不佔據記憶體 = rvalue
(var + 1) = 4; // var + 1 也不佔據記憶體 = rvalue
以上 2 跟 3 行會報錯,lvalue required as left operand of assignment。表示這個賦值程式碼錯在給不存在的記憶體空間賦值。所以只要是 lvalue 就能賦予值,即使是 function 也一樣,下面的 function 引用一個左值 ( globalvar ),所以可以賦予值。
int globalvar = 20;
int &foo() {
return globalvar;
}
int main() {
foo() = 10;
std::cout << globalvar; // 10
return 0;
}
lvalue、rvalue 轉換
左值能直接的轉換成右值,但右值卻不行,這時就會需要 ' * ' 。
int a = 1;
int b = a + 1; // 這裡的 a 被直接視為右值
int arr[] = {a, b};
int *p = arr;
*(p + 1) = 10; // 利用 * 將右值 (p + 1) 傳換成左值
參考資料 :
0 意見:
張貼留言