左值、右值以及移动语义

发布时间 2023-03-27 21:28:47作者: 海蓝笨

简单理解,左值拥有地址,右值没有地址,是一个临时变量。

左值不一定在左边,在右边的不一定是右值

    int i = 10;
    int a = i;//把左值赋给左值

左值引用

非const右值不能赋值给左值引用
int
SetValue(int value) { return value; } int SetValue2(int& value){ return value; } int main() { int i = 10; int a = i;//把左值赋给左值 SetValue(i); SetValue(10); SetValue2(i); SetValue2(10);//错误 }

const的情况下

    int& b = 10;//错误,右值无法赋给左值引用
    const int& c = 10;//可以,等价于int temp=10; 
                      //         const int&c=temp;相当于临时创建了一个左值
int SetValue3(const int& value) {//这样的形式,SetValue3(10)或者SetValue(a)都不会报错
    return value;
}

右值引用

int SetValue3(const int& value) {//这样的形式,SetValue3(10)或者SetValue(a)都不会报错
    return value;
}
int SetValue3(int&& value) {//右值引用
    return value;
}

int main()
{
        SetValue3(10);//会优先调用传参是右值引用的函数
    SetValue3(a);
}

const int&& value。就相当于不能修改value这个值,和const一个意思