左值,右值,右值引用

左值左值是指向内存的表达式。可以出现在“=”的左边或者右边。左值表达式表示的是对象的标识或者地址,可以进行读取和写入的操作。

const 左值引用:常用于函数参数,以避免意外修改传入的对象。同时,const 左值引用可以绑定到右值,延长临时对象的生命周期。

右值右值是指向值的表达式。通常是临时性的,不能出现在赋值操作的左边。右值可以用来提供初始值,但不能被修改。

函数返回值(左值,右值)

如果函数返回一个非引用类型的变量(对象):可以使用它来初始化其他变量,但你不能修改它。

int getValue() {
    return 42;
}

int main() {
    int x = getValue();  // 正确,getValue() 是右值
    getValue() = 100;    // 错误,getValue() 是右值,不可修改
    return 0;
}

函数返回一个引用类型的变量: 这意味着你可以修改它,就像修改任何其他左值一样。

//不要将局部变量的引用返回,因为返回后局部变量被销毁

int globalValue = 42;

int& getReference() {
    return globalValue;
}

int main() {
    getReference() = 100;  // 正确,getReference() 是左值,可以修改
    return 0;
}
//不要将局部变量的引用返回,因为返回后局部变量被销毁

右值引用

右值是不能取地址的,但给右值取别名后,会导致右值存储到特定的位置,且可以取到该位置的地址。右值的引用是左值。

int main()
{
    //不能取字面量10的地址。
    //但是rr引用后,可以对rr取地址,也可以修改rr。
    int&& rr = 10;
    rr = 20;
    return 0;
}

move语义

有些场景下,当需要用右值引用去引用一个左值时,可以通过move函数将左值转化为右值。c++11中,std::move函数位于<utility>头文件中,move唯一功能是将左值强制转化成右值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值