Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Что такое rvalue и lvalue?

#cpp


На разных ресурсах нашел разные определения rvalue, lvalue. 
Как же правильно? 

right value или read value? 

left value или locator value? 
    


Ответы

Ответ 1



Исходно речь шла про правую и левую части относительно оператора присваивания. Но правильного варианта такой простой расшифровки нет и быть не может. Термины так и останутся rvalue и lvalue. А вот какой в них вложен смысл чётко прописано в стандарте. Всё это образует категории выражений. glvalue Выражение, чьё вычисление определяет сущность объекта, битового поля или функции. prvalue Выражение, чьё вычисление инициализирует объект, битовое поле или вычисляет значение операнда оператора, с соответствии с контекстом использования. xvalue Это glvalue, которое обозначает объект или битовое поле, чьи ресурсы могут быть повторно использованы (обычно потому, что они находятся около конца своего времени жизни). lvalue Это glvalue, которое не является xvalue. rvalue Это prvalue или xvalue. Таким образом любое выражение есть в первую очередь lvalue, xvalue или prvalue. rvalue - это уже обобщение.

Ответ 2



Не знаю, что Вы имеете ввиду под вопросом "как правильно". rvalue и lvalue - это категории выражений. Вот что написано в стандарте: — A glvalue is an expression whose evaluation determines the identity of an object, bit-field, or function. — A prvalue is an expression > whose evaluation initializes an object or a bit-field, or computes the value of the operand of an operator, as specified by the context in which it appears. — An xvalue is a glvalue that denotes an object or bit-field whose resources can be reused (usually because it is near the end of its lifetime). — An lvalue is a glvalue that is not an xvalue. — An rvalue is a prvalue or an xvalue. //... [Note: Historically, lvalues and rvalues were so-called because they could appear on the left- and right-hand side of an assignment (although this is no longer generally true); glvalues are “generalized” lvalues, prvalues are “pure” rvalues, and xvalues are “eXpiring” lvalues. Despite their names, these terms classify expressions, not values. — end note]

Комментариев нет:

Отправить комментарий