左值、右值、左值引用,右值引用,std::move函式
1. 左值和右值
int i = 10; // 物件:一塊記憶體區域
i = 20;
// 左值:能用在賦值語句等號左側的東西,它能夠代表 一個地址
// 右值:不能作為左值的就是右值
// 結論:C++ 的一條表示式,要麼就是左值,要麼就是右值,不可能兩者都不是
// 左值有時候能夠被當做右值使用
i = i + 1; // 因為已經出現在左側了,所以是左值【i 用在等號右邊的時候,我們說 i 有一種右值屬性(不是右值)】
// 用到左值的運算子有哪些:
// a) 賦值運算子
int a;
printf("%d\n", a = 4); // 整個賦值語句的結果仍然是左值(即:一個記憶體地址)
(a = 4) = 8;
// b) 取地址 &
int b = 5;
int* p = &b; // 指標變數也是變數(所以也是左值)
// c) string, vector 下標[] 都需要左值
string abc = "I love You";
vector<int>::iterator iter;
abc[0];
iter++;
iter--;
// d) 透過看一個運算子在一個字面值上能不能操作,我們就可以判斷運算子是否用到的是左值
// i++,5++
// 左值表示式【左值】、右值表示式【右值】
// 左值:代表一個地址,所以左值表示式的求值結果,就得是一個物件。
2. 引用分類
2.1 左值引用
2.2 右值引用
3. std::move 函式
4. 左值和右值總結說明