标准里对左值有如下描述:
An lvalue is an expression with an object type or an incomplete type other than void;53)
if an lvalue does not designate an object when it is evaluated, the behavior is undefined.
When an object is said to have a particular type, the type is specified by the lvalue used to
designate the object. A modifiable lvalue is an lvalue that does not have array type, does
not have an incomplete type, does not have a const-qualified type, and if it is a structure
or union, does not have any member (including, recursively, any member or element of
all contained aggregates or unions) with a const-qualified type.
其实可以理解成,左值是对象的引用,右值一般不受限制。任何表达式不是左值就是右值,所以只要别搞混就行了。
我觉得一般的编程里不太用这个概念,如果出了語法错误,自己想想应该都能改过来才对。实在弄不清楚就往后放放,过一段间自己就能感觉出来了。就像你可能说不形容词和副词的定义,甚至连它们的区别也表述不了。但是在遇到的时候还是能分出来,能分出来才是目的,概念什么的不重要。(除非你是语言工作者)