区别"/>
c++左值和右值的区别
在c++ 中左值和右值是表达式的两种类别, 他们的主要区别在于对象的身份和可移动性
1. 左值(Lvalue)
左值是指那些表达式结束之后依然存在的对象,他们有明确的持久地址(内存地址) ,通俗来说,左值可以看作一个篮子,即便你往篮子里面放入或者取处之后,篮子(变量)依然存在,你可以多次使用它 。
- 你可以对左值取地址
- 左值可以出现在赋值表达式的左边或者右边
- 函数返回一个非引用类型时,通常返回的是右值,但是如果函数返回一个引用类型是,那么返回的是左值
比如说, int x = 10 ; x就是一个左值
2. 右值(Lvalue)
右值指的是不具有持久地址的临时对象 , 当表达式结束后他们就不存在了,右值更像手中的苹果,用完之后 , 它就不存在了, 这种临时性质使得它们可以被“移动” , 而不仅仅是被“拷贝”
- 不能对右值进行取地址
- 右值只能出现在赋值表达式的右边
- 字面值 (如 10 , a)返回返回临时对象或表达式生成的临时结果都是右值
比如 表达式10 , x+ 2 std::string(“hello”) 中的10 x+2 以及通过构造函数生成的字符串都是右值
3.右值和左值的区别
- 身份: 左值有持久的内存地址, 而右值常常都是临时的
- 可修改性: 左值可以被重新赋值, 而右值不可以
- 函数重载:在函数重载中,可以根据参数是左值还是右值选择不同的函数进行实现
更多推荐
c++左值和右值的区别
发布评论