左值、右值、左值引用,右值引用,std::move函式

爱新觉罗LQ發表於2024-11-09

左值、右值、左值引用,右值引用,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. 左值和右值總結說明

相關文章