C++中的左值和右值

摘自《C++ Primer》第五版

C语言中,左值可以位于赋值语句的右侧,右值则不能。

C++中,一个对象被用作右值时,用的是对象的值(内容);当对象被当做左值的时候,用的是对象的身份(在内存中的位置)。     一个左值表达式的求值结果是一个对象或者一个函数。当然,以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象(本人理解:功能不全的左值;除了自己的初始化,一般不用作左值使用。)

个人理解:左值一般和地址有关系。

左值和右值转换的一个重要原则:在需要右值的地方可以使用左值来替代,但是不能在需要左值(位置)的地方,使用右值。当然,也有一种例外的情况(参见P470,还没看到)。

P149:左值是指那些求值结果为对象或函数的表达式。一个表示对象的非常量左值可以作为赋值

关于运算符操作数和返回值的左右值

操作符
操作数
求值结果
备注
算数运算符
右值
右值

逻辑运算符和关系运算符
右值
右值

赋值运算符
左侧操作数必须是可以修改的左值
左值

递增/递减运算符
左值
前置版本返回左值,后置版本返回右值

成员访问运算符(.  ->)

箭头运算符求值结果是一个左值;点运算符区分情况:如果成员所属的对象是左值,那么返回结果是左值,反之,返回右值。

条件运算符
无要求
当?后面的两个表达式都是左值或者能转换成同一种左值类型时,运算结果是左值;否则运算结果是右值。

位运算符
无要求;操作数为整形或可以提升为整形的char
右值
推测
sizeof运算符
无要求


逗号运算符
无要求
和右侧运算对象保持一致,右侧运算对象是左值,结果也是左值


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章