Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
1

Rvalue и lvalue

24.07.2020, 23:54. Показов 3279. Ответов 54
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот так я возвращаю lvalue ссылку на lvalue объект
C++
1
int& test() {int a; return a;}
Вот так rvalue ссылку на rvalue объект
C++
1
someclass&& test() {return someclass() ;}
А вот так я что возвращаю?
C++
1
someclass test() {someclass sc; return sc;}
Если выключить все оптимизации и представить что у класса someclass есть все конструкторы и все операторы то какие должны сработать в этом(третьем) варианте?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2020, 23:54
Ответы с готовыми решениями:

C++ expressions - rvalue, glvalue, prvalue, xvalue, lvalue, а также rvalue reference: что есть что?
Доброго времени суток, не понимаю до конца деление С++ - выражений (приложение 1). Lvalue вроде...

RVALUE Ссылка, error: cannot bind non-const lvalue reference of type 'String&' to an rvalue of type 'String'|
Код не компилируется ниже 17 стандарта с++ с ошибкой error: cannot bind non-const lvalue reference...

Проблема с rvalue и lvalue
Не совсем понятно почему создавая ссылку на rvalue она определяется как lvalue ? Пример: ...

Rvalue и lvalue ссылки
Здравствуйте, что расскажите, пожалуйста что такое lvalue и rvalue ссылки и с чем их едят, где...

54
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4704 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
25.07.2020, 00:17 2
Цитата Сообщение от Vanconts Посмотреть сообщение
Вот так я возвращаю lvalue ссылку на lvalue объект
Ссылка на локальный объект, это не то что нужно считать хорошим правилом:
Цитата Сообщение от Vanconts Посмотреть сообщение
Вот так я возвращаю lvalue ссылку на lvalue объект
Vanconts, для того чтобы вернуть что нибудь ненужное, нужно сначала получить что нибудь ненужное. Можно получить ссылку из-вне, создать объект в куче, использовать статический локальный объект или даже глобальный...
Цитата Сообщение от Vanconts Посмотреть сообщение
А вот так я что возвращаю?
Возврат по значению может трактоваться компилятором по разному. Самое тяжелое - вернёт копию.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 01:01  [ТС] 3
IGPIGP, та я просто для примера, то что возврат ссылки на локальный объект это неправильно это понятно.
Вопрос в том что в 3 случае происходит? Если вернёт копию значит эта копия будет rvalue? Почему если написать конутркуторы для этого класса то сработает конутрктор перемещения в месте возврата значения? А не конструктор копирования.
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
25.07.2020, 01:34 4
Цитата Сообщение от Vanconts Посмотреть сообщение
Почему если написать конутркуторы для этого класса то сработает конутрктор перемещения в месте возврата значения? А не конструктор копирования.
Ну потому что так язык работает.
Если вы возвращаете объект по значению и у него доступен конструктор перемещения, то будет перемещение. Потому что потенциально перемещение по крайней мере не хуже, чем копирование, а локальный объект уже все равно никто больше не использует, так почему бы и не попробовать его переместить?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12812 / 6684 / 1800
Регистрация: 18.10.2014
Сообщений: 16,935
25.07.2020, 01:38 5
Цитата Сообщение от Vanconts Посмотреть сообщение
А вот так я что возвращаю?
C++
1
someclass test() {someclass sc; return sc;}
Объект по значению. Результат вызова такой функции - prvalue.

Цитата Сообщение от Vanconts Посмотреть сообщение
Если выключить все оптимизации
В языке С++ нет такого понятия как "включить оптимизации" или "выключить оптимизации".

Цитата Сообщение от Vanconts Посмотреть сообщение
и представить что у класса someclass есть все конструкторы и все операторы то какие должны сработать в этом(третьем) варианте?
Вопрос не имеет смысла, пока речь не идет о конкретном примере вызова такой функции.
2
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
25.07.2020, 08:10 6
Vanconts,
в первых двух случаях ты возвращаешь локальный объект по ссылке, чего делать нельзя.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 11:14  [ТС] 7
DrOffset, но насколько я знаю ссылку на rvalu нельзя инициализировать lvalue, почему тогда конструктор перемещения срабатывает?

Добавлено через 1 час 4 минуты
TheCalligrapher, мне бы книжечку какую-то чтобы разобраться во всех этих rvalue xvalue prvalue и что там еще есть... Подскажете ?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
25.07.2020, 12:47 8
Лучший ответ Сообщение было отмечено Vanconts как решение

Решение

Vanconts, давай я подскажу, читать по порядку:
http://rsdn.org/article/cpp/lvalue.xml
https://rsdn.org/article/cpp/Cpp11NewStd.xml
https://habr.com/ru/post/226229/
https://habr.com/ru/post/322132/
и перечитывать пока не наступит эйфория.

Добавлено через 5 минут
еще у Мейерса в книге https://coollib.net/b.usr/Skot... %2B%2B.pdf расписано более имение, советую все прочитать, а по твоему вопросу Глава 5.

Добавлено через 5 минут
Цитата Сообщение от Vanconts Посмотреть сообщение
мне бы книжечку какую-то чтобы разобраться во всех этих rvalue xvalue prvalue и что там еще есть... Подскажете ?
они тебе не подскажут книгу где это расписано, потому что у них это в крови.
2
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 12:55  [ТС] 9
_stanislav,
Цитата Сообщение от _stanislav Посмотреть сообщение
они тебе не подскажут книгу где это расписано, потому что у них это в крови.

Не по теме:

но они же тоже когда-то с чего-то начинали :)

0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
25.07.2020, 13:08 10
Цитата Сообщение от _stanislav Посмотреть сообщение
они тебе не подскажут книгу где это расписано
Что за ерунда?
Вот именно книгу Мейерса сначала и нужно читать по этой теме. А потом уже всякие статьи и т.п.
2
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
25.07.2020, 13:13 11
Цитата Сообщение от Vanconts Посмотреть сообщение
но они же тоже когда-то с чего-то начинали
Цитата Сообщение от DrOffset Посмотреть сообщение
Что за ерунда?
Это шутка была, сладкая лесть комплимент в сторону профессионалов (это то же лесть комплимент )
0
Croessmah
25.07.2020, 13:14
  #12

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Вот именно книгу Мейерса сначала и нужно читать по этой теме.
Да, это именно та книга, которая может разложить всё по полочкам.

0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
25.07.2020, 13:16 13
Цитата Сообщение от DrOffset Посмотреть сообщение
Вот именно книгу Мейерса сначала и нужно читать по этой теме. А потом уже всякие статьи и т.п.
Цитата Сообщение от Croessmah Посмотреть сообщение
Да, это именно та книга, которая может разложить всё по полочкам.
не согласен, с первой ссылки которую я скинул будет полезно начать.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 17:14  [ТС] 14
_stanislav, в книге той которую Вы мне посоветовали там о move семантике в основном, там нету о prvalue и тд
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
25.07.2020, 17:23 15
Цитата Сообщение от Vanconts Посмотреть сообщение
там нету о prvalue
тебе нужно понять эту картинку и все:
за один день не получиться все в мозгу устаканить, ясно?
Миниатюры
Rvalue и lvalue  
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
25.07.2020, 17:24 16
Вложение 1168840
Изображения
 
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
25.07.2020, 17:25 17
я тут скинул не ту карту сокровишь сори
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 17:45  [ТС] 18
_stanislav, Вот есть lvalue - это выражения которые имеют и адрес и значение, rvalue - выражения без адреса.
Вроде бы понятно , литерал не будет иметь адреса в памяти процеса, но если взять анонимный объект
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
class c {
public:
    c() :a(0) { std::cout << "simple constructor\n"; }
    c(int a) :a(a) { std::cout << "int constructor\n"; }
 
 
    ~c() { std::cout << "destructor\n"; }
    
    int a;
};
 
 
int main()
{
    c();
}
он же конструируется , у него же должен быть адрес и значение , разве нет?

Добавлено через 1 минуту
И еще почему ссылки это всегда lvalue?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
25.07.2020, 17:49 19
Цитата Сообщение от Vanconts Посмотреть сообщение
И еще почему ссылки это всегда lvalue?
почему пузатые сначала пишут законы, а потом под эти законы тоже пишут законы?, это в России.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 17:51  [ТС] 20
_stanislav,
Цитата Сообщение от _stanislav Посмотреть сообщение
почему пузатые сначала пишут законы, а потом под эти законы тоже пишут законы?, это в России.

Не по теме:

такое не только в России)

0
25.07.2020, 17:51
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2020, 17:51
Помогаю со студенческими работами здесь

Непонятное поведение rvalue/lvalue
Всем привет, объясните, пожалуйста, немного про р-вэлью и л-вэлью в этом коде: #include &lt;iostream&gt;...

Почему i++ это rvalue, а ++i lvalue?
Встречал упоминания что для постинкремента создается временная копия, но дальше не объясняется....

Что такое rvalue и lvalue
как понимать эти штуки?

Семантика перемещения rvalue\lvalue ссылок
Здравствуйте форумчани. Объясните пожалуйста процессы происходящии внутрии функции swap принимающую...

Lvalue, xvalue, glvalue, rvalue, prvalue
Для чего понадобилось такое разделение выражений lvalue, xvalue, glvalue, rvalue, prvalue. Для...

Rvalue, lvalue, xvalue, prvalue, glvalue
Не в той теме начали обсуждать. Создам новую. то, что знаю я (выучил к собесед-ию), но глубокого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru