前言
此筆記目前尚未整理完成,如需學習完整內容可參考隨附的 reference,或自行 google 搜尋
但因為作者要整理的筆記太多,如果想早點看到整理後的文章,可以下方留言「期待整理」之類的… 我會努力找時間優先整理!
在 Modern C++ 中,Rvalue、Lvalue 是我們在討論後續使用經常討用的概念,
雖然不會直接在程式碼中看到這個詞,但依然是非常重要的觀念。
不嚴謹但比較好分析的定義
比較單純的,我們確實可以透過左右來分辨是否是 Rvalue、Lvalue,
但這樣不夠精確,例如在傳入 constructor 時,
我們必須知道傳入的是 Rvalue、Lvalue,會有不同對應的 constructor 方式。
- Lvalue: 我們可以找到他的 address
- Rvalue: 非 Lvalue (找不到 address)
Lvalue
範例 - Lvalue
- variable
int i = 0;
i = 10; // i = Lvalue
int *p = &i; // 注意:i = Lvalue
- function
int& foo();
foo() = 10; // foo(): Lvalue
int *p = &foo(); // foo(): Lvalue
Rvalue
範例 - Rvalue
- variable:
int i = 0;
i = 10; // 10 = Rvalue
- function:
int foo();
int a;
a = foo(); // foo(): Rvalue
// int* p = &foo(); // error, Rvalue has no address