c++左值和右值的区别

在c++ 中左值和右值是表达式的两种类别, 他们的主要区别在于对象的身份可移动性

1. 左值(Lvalue)

左值是指那些表达式结束之后依然存在的对象,他们有明确的持久地址(内存地址) ,通俗来说,左值可以看作一个篮子,即便你往篮子里面放入或者取处之后,篮子(变量)依然存在,你可以多次使用它 。

  • 你可以对左值取地址
  • 左值可以出现在赋值表达式的左边或者右边
  • 函数返回一个非引用类型时,通常返回的是右值,但是如果函数返回一个引用类型是,那么返回的是左值
    比如说, int x = 10 ; x就是一个左值

2. 右值(Lvalue)

右值指的是不具有持久地址的临时对象 , 当表达式结束后他们就不存在了,右值更像手中的苹果,用完之后 , 它就不存在了, 这种临时性质使得它们可以被“移动” , 而不仅仅是被“拷贝”

  • 不能对右值进行取地址
  • 右值只能出现在赋值表达式的右边
  • 字面值 (如 10 , a)返回返回临时对象或表达式生成的临时结果都是右值
    比如 表达式10 , x+ 2 std::string(“hello”) 中的10 x+2 以及通过构造函数生成的字符串都是右值

3.右值和左值的区别

  • 身份: 左值有持久的内存地址, 而右值常常都是临时的
  • 可修改性: 左值可以被重新赋值, 而右值不可以
  • 函数重载:在函数重载中,可以根据参数是左值还是右值选择不同的函数进行实现

你可能感兴趣的:(c++,c++,开发语言)