Что такое lvalue?
Возможный дубликат:
Что такое rvalues, lvalues, xvalues, glvalues и prvalues?
Стандарт С++, в основном в главе 5 под названием "Выражения", определяет, какие выражения являются lvalues и являются значениями r. Я прочитал эту главу, и я считаю, что могу правильно различать lvalues и rvalues.
Однако, прежде чем я прочитал хорошие книги на С++ и/или стандарт, я думал, что lvalue - это то, что может стоять на левой стороне задания, а rvalue - это то, что не может. Очевидно, что существует множество контрпримеров этого наивного определения. Некоторое время спустя я подумал, что lvalue - это то, что имеет адрес, а rvalue - это то, чего нет. У этого тоже, кажется, есть контрпримеры в виде, скажем, некоторых временных объектов, которые, очевидно, имеют адрес.
Один мой друг спросил меня, что такое lvalue и что такое rvalue. Я сказал ему приблизительно, что это такое, он потребовал более полного ответа. Я сказал ему пойти почитать стандарт. Он отказался приставать к своим мозгам и сказал, что он уверен, что должно быть какое-то необходимое и достаточное условие для того, чтобы что-то было lvalue.
Есть ли?
Например, lvalue - это то, к чему может привязываться ссылка, отличная от const. Но это не очень удовлетворительно. Я ищу что-то более очевидное, то, что легко объяснить, не прибегая к рассмотрению каждого типа выражения...
Надеюсь, этот вопрос был ясен.
Ответы
Ответ 1
Довольно просто, rvalue - это когда результат выражения не выйдет за конец указанного выражения. Значение l будет. Этот базовый принцип - это то, что позволяет перемещать семантику и ссылки на rvalue, - что вы можете изменить их без проблем, потому что вы знаете, что срок жизни объекта завершен.
Ответ 2
Я нашел, что lvalues как "вещи с именами" - самое полезное упрощение. Выражение ++x
является lvalue, с именем x
. Напротив, rvalue
- это "вещи без имен". x++
- это значение r, поскольку оно дает некоторое неназванное значение.
Ответ 3
может быть, вы просто немного запутались между изменяемыми значениями lvalue и non-lvalues.
rvalues могут быть lvalues или non-lvalues. Член модифицируемой lvalue используется после введения модификатора const (см. запись в википедии значений)
в С++ каждое выражение возвращает значение lvalue, rvalue или no. Когда lvalue появляется как rvalue, оно неявно преобразуется в rvalue (см. IBM по типам значений)
Ответ 4
Значение l - это то, что относится к ячейке памяти. это самая простая вещь, которую я мог бы сказать. Значение r может быть значением l
Значение r является результатом выражения или константы