c++ 右值左值

左值右值

名词

左值:lvalue,left value

右值:rvalue,right value

C语言

这两个名词是从C语言继承过来的,C语言中为了帮助记忆:左值可以出现在赋值语句的左侧,右值则不能。

C++

  • 在C++语言中,二者的区别就没那么简单了。C++的表达式要不然就是左值,要不然就是右值,不存在黑户。

  • 一个左值表达式的求值结果是一个对象或者一个函数,然而以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象。此外,虽然某些表达式的求值结果是对象,但它们是右值而非左值。

  • 可以做一个简单的归纳:当一个对象被用作右值的时候,用的是对象的值(内容),当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。

  •  知乎看到的经典总结:左值右值的形式区分(或者称语法区分)是能否用取地址&运算符;语义区分(即其本质涵义)在于表达式代表的是持久对象还是临时对象。

猜你喜欢

转载自www.cnblogs.com/Yu-900914/p/10036070.html