Подтвердить что ты не робот

Что такое lvalue?

Возможный дубликат:
Что такое rvalues, lvalues, xvalues, glvalues ​​и prvalues?

Стандарт С++, в основном в главе 5 под названием "Выражения", определяет, какие выражения являются lvalues ​​и являются значениями r. Я прочитал эту главу, и я считаю, что могу правильно различать lvalues ​​и rvalues.

Однако, прежде чем я прочитал хорошие книги на С++ и/или стандарт, я думал, что lvalue - это то, что может стоять на левой стороне задания, а rvalue - это то, что не может. Очевидно, что существует множество контрпримеров этого наивного определения. Некоторое время спустя я подумал, что lvalue - это то, что имеет адрес, а rvalue - это то, чего нет. У этого тоже, кажется, есть контрпримеры в виде, скажем, некоторых временных объектов, которые, очевидно, имеют адрес.

Один мой друг спросил меня, что такое lvalue и что такое rvalue. Я сказал ему приблизительно, что это такое, он потребовал более полного ответа. Я сказал ему пойти почитать стандарт. Он отказался приставать к своим мозгам и сказал, что он уверен, что должно быть какое-то необходимое и достаточное условие для того, чтобы что-то было lvalue.

Есть ли?

Например, lvalue - это то, к чему может привязываться ссылка, отличная от const. Но это не очень удовлетворительно. Я ищу что-то более очевидное, то, что легко объяснить, не прибегая к рассмотрению каждого типа выражения...

Надеюсь, этот вопрос был ясен.

4b9b3361

Ответ 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 является результатом выражения или константы