Возможный дубликат:
Что такое rvalues, lvalues, xvalues, glvalues и prvalues?
Стандарт С++, в основном в главе 5 под названием "Выражения", определяет, какие выражения являются lvalues и являются значениями r. Я прочитал эту главу, и я считаю, что могу правильно различать lvalues и rvalues.
Однако, прежде чем я прочитал хорошие книги на С++ и/или стандарт, я думал, что lvalue - это то, что может стоять на левой стороне задания, а rvalue - это то, что не может. Очевидно, что существует множество контрпримеров этого наивного определения. Некоторое время спустя я подумал, что lvalue - это то, что имеет адрес, а rvalue - это то, чего нет. У этого тоже, кажется, есть контрпримеры в виде, скажем, некоторых временных объектов, которые, очевидно, имеют адрес.
Один мой друг спросил меня, что такое lvalue и что такое rvalue. Я сказал ему приблизительно, что это такое, он потребовал более полного ответа. Я сказал ему пойти почитать стандарт. Он отказался приставать к своим мозгам и сказал, что он уверен, что должно быть какое-то необходимое и достаточное условие для того, чтобы что-то было lvalue.
Есть ли?
Например, lvalue - это то, к чему может привязываться ссылка, отличная от const. Но это не очень удовлетворительно. Я ищу что-то более очевидное, то, что легко объяснить, не прибегая к рассмотрению каждого типа выражения...
Надеюсь, этот вопрос был ясен.