摘自《C++ Primer》第五版
C语言中,左值可以位于赋值语句的右侧,右值则不能。
C++中,一个对象被用作右值时,用的是对象的值(内容);当对象被当做左值的时候,用的是对象的身份(在内存中的位置)。 一个左值表达式的求值结果是一个对象或者一个函数。当然,以常量对象为代表的某些左值实际上不能作为赋值语句的左侧运算对象(本人理解:功能不全的左值;除了自己的初始化,一般不用作左值使用。)
个人理解:左值一般和地址有关系。
操作符
|
操作数
|
求值结果
|
备注
|
算数运算符
|
右值
|
右值
|
|
逻辑运算符和关系运算符
|
右值
|
右值
|
|
赋值运算符
|
左侧操作数必须是可以修改的左值
|
左值
|
|
递增/递减运算符
|
左值
|
前置版本返回左值,后置版本返回右值
|
|
成员访问运算符(. ->)
|
|
箭头运算符求值结果是一个左值;点运算符区分情况:如果成员所属的对象是左值,那么返回结果是左值,反之,返回右值。
|
|
条件运算符
|
无要求
|
当?后面的两个表达式都是左值或者能转换成同一种左值类型时,运算结果是左值;否则运算结果是右值。
|
|
位运算符
|
无要求;操作数为整形或可以提升为整形的char
|
右值
|
推测
|
sizeof运算符
|
无要求
|
|
|
逗号运算符
|
无要求
|
和右侧运算对象保持一致,右侧运算对象是左值,结果也是左值
|