1 / 1 / 0
Регистрация: 11.04.2012
Сообщений: 36
|
|||||||||||
1 | |||||||||||
Значения Lvalue и Rvalue14.08.2016, 14:01. Показов 1383. Ответов 17
Метки нет (Все метки)
Здравствуйте.
В данной ссылке https://msdn.microsoft.com/ru-... 831hc.aspx приведен пример
Заранее, большое спасибо
0
|
14.08.2016, 14:01 | |
Ответы с готовыми решениями:
17
Lvalue и rvalue Ошибка: cannot bind non-const lvalue reference of type 'double&' to an rvalue of type 'double' - почему? C++ expressions - rvalue, glvalue, prvalue, xvalue, lvalue, а также rvalue reference: что есть что? RVALUE Ссылка, error: cannot bind non-const lvalue reference of type 'String&' to an rvalue of type 'String'| |
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
14.08.2016, 14:46 | 2 | |||||
lvalue - левостоящее
rvalue - правостоящее
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.08.2016, 17:24 | 4 |
0
|
14.08.2016, 17:41 | 5 | ||||||||||
ну или:
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.08.2016, 17:42 | 6 |
и.. как это противоречит #2 ?
я просил случай, когда формулировка не работает.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
14.08.2016, 17:44 | 8 | |||||
перефразируем:
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
14.08.2016, 17:48 | 10 | |||||
вы не путайте rvalue и временный объект.
это разные понятия. с чего вообще вы взяли, что временный объект обязательно должен быть rvalue ?
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.08.2016, 18:13 | 12 |
посмотрели, и увидели, что rvalue - правостоящее выражение.
нет никаких "так что". то, что временные объекты на практике чаще всего тусят справа, ещё не делает их только rvalue. теперь почитайте, чем являются временные объекты. он иллюстрирует, что temporary object - не обязан быть rvalue.
0
|
14.08.2016, 18:19 | 13 |
Ага, причем написано, что название просто исторически сложилось
Приведите пример, где оно lvalue? Только не надо биндить к ссылке, т.к. результат будет другой. Ни разу не иллюстрирует. Этот код вообще ничего не иллюстрирует, он лишь показывает, что rvalue может быть слева от о"=". В стандарте написано, что названия lvalue и rvalue исторически сложились, а не то что lvalue - это то, что стоит слева.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.08.2016, 19:07 | 14 |
а ещё написано почему оно таким сложилось.
и что именно может выступать в качестве lvalue/pvalue в качестве lvalue может выступать любой объект. не важно, временный он, или нет. см #10 вы сами понимаете, насколько сейчас противоречите здравому смыслу? вчитайтесь внимательно в строки стандарта: в левой части выражения могут быть любые объекты. не важно: временные они там, или нет. в правой - только xvalue или временные. но сам по себе временный объект не обязан быть обязательно rvalue
0
|
14.08.2016, 19:28 | 15 | |||||
Там оно rvalue
Ни насколько. Еще раз - lvalue/rvalue вообще никаким боком не относится к позиции относительно "=". Это вообще характеристики выражений. Просто так повелось и не более того. Кстати, для данного случая, Майерс привел более удачную формулировку, но и та не очень точная. Это Вы явно не допоняли. Уперлись в свои "лево-право", которые тут только лишь из-за "старых устоев".
И вообще что это значит? lvalue/rvalue относятся к выражениям, а не к объектам. Выражение в контексте создания временного объекта - rvalue. И, кстати, could - прошедшее время, так что тут "могли появляться", а не "могут появляться" Итого, вся фраза, - "название исторически сложилось, потому что rvalue могли появляться с правой стороны в выражении присваивания". Но ведь с приходом C++11 виды выражений были расширены.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.08.2016, 20:15 | 16 |
то есть значение, которое выступает в качестве левостоящего
по вашему является "право стоящим" ? и что такое "характиристика выражения" по вашему? этого не достаточно. если вы считаете, что я ошибаюсь, тогда говорите в чем именно. и как оно на самом деле. моё понимание очень простое: gvalue - самые обычные (именованные) объекты rvalue - объекты, основной кейс которых - быть результатом выражения. "r" - от слова "rigth". потому исторически так сложилось, что в составе сложного выражения они находятся с правой стороны. в свою очередь, gvalue дополнительно подразделяется на lvalue и xvalue lvalue - самые обычные именованные объекты. "l" от слова "left" потому что их основной кейс в сложных выражениях - тусить с левой стороны. xvalue - это бывший gvalue, который принудительно привели к rvalue-reference то есть была обычная переменная. а мы взяли и при помощи std::move заставили компилятор думать, что объект - временный. rvalue обозначает как бы"временный объект, но как он образовался - не конкретизируется. в свою очередь подразделяется на prvalue и xvalue prvalue - это временные объекты (которые были рождены временными). xvalue - писал выше. вот и все понимание. все эти категории на самом деле нужны лишь для того, что бы конкретизировать контекст использования. можно ещё и так сказать: rvalue - это значение, выступающее в качестве результата выражения. а сейчас что, уже не могут?
0
|
14.08.2016, 21:22 | 17 | |||||
Выше написано: Expression category taxonomy.
Уже перешел на "самопальные" выражения, т.к. по другому не понятно. Еще раз: lvalue/rvalue НИКАК НЕ ОТНОСИТСЯ К ПОЛОЖЕНИЮ ВЫРАЖЕНИЯ. А лево-право - лишь историческое наследие. У меня как раз блог о перемещении зреет. Там своими словами: lvalue - фактически, это именованные объекты, а также выражения, результатами которого является lvalue-reference (еще надо доработать по части функций). xvalue - ссылаются на объекты, которые вот-вот умрут (например, после выхода из функций), так же выражения с rvalue-reference являются xvalue. glvalue - включает в себя xvalue или lvalue (эдакая надкатегория, фактически, да - это "обычные" именованные объекты). rvalue - включает в себя xvalue, временные объекты, а также всё то, что не ассоциировано с объектами. prvalue - это выражения, которые rvalue, но не могут быть xvalue (например, литералы). Не только, xvalue - это еще когда объект на грани смерти. А после перемещения объект не умирает же.
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
14.08.2016, 21:39 | 18 |
0
|
14.08.2016, 21:39 | |
14.08.2016, 21:39 | |
Помогаю со студенческими работами здесь
18
Rvalue и lvalue ссылки Что такое rvalue и lvalue Почему i++ это rvalue, а ++i lvalue? Непонятное поведение rvalue/lvalue Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |