С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/37: Рейтинг темы: голосов - 37, средняя оценка - 4.73
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

rvalue ссылки

17.12.2019, 11:36. Показов 7873. Ответов 93
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может кто объяснить зачем нужны rvalue ссылки и как правильно работать с std::move и std::forward?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.12.2019, 11:36
Ответы с готовыми решениями:

Зачем нужны rvalue ссылки, если есть универсальные ссылки
Читаю книгу Скотта Мэйерса... Что-то я совсем запутался с этими rvalue ссылками. Я не пойму, зачем нужны rvalue ссылки, если есть...

Ссылки от rvalue
Доброго времени суток, господа! Начал читать статью про rvalue ссылки на хабре и что-то много вопросов появилось, вот. void...

Rvalue ссылки
Литературу читаю, но доезжаю медленно(если знаете где доступно описано- напишите),тяжело болею умственной анорексией. 1.Так вот о...

93
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
17.12.2019, 11:47
например, для ускорения работы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
void print_and_kill(vector<int> b){
    for(int x: b)
      cout<<x<<" ";
}
int main()
{
    vector<int> a={1, 2, 3, 4};
    //вектор a нам не нужен больше, поэтому можно не стараться создавать его копию и поэлементно копировать в аргументы функции
    print_and_kill(move(a));
    if(a.empty())
      cout<<"a_is_empty";    
}
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
17.12.2019, 11:49
Цитата Сообщение от ReYalp Посмотреть сообщение
Может кто объяснить зачем нужны rvalue ссылки и как правильно работать с std::move и std::forward?
вряд ли кто нибудь захочет это объяснять, там черт ногу сломит, но ссылок накидаю:
https://habr.com/ru/post/226229/
https://habr.com/ru/post/322132/
https://habr.com/ru/post/348198/
http://rsdn.org/article/cpp/lvalue.xml
https://rsdn.org/article/cpp/Cpp11NewStd.xml
https://habr.com/ru/post/441742/
https://habr.com/ru/post/216783/
Удачи и терпения, она тебе пригодиться.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
17.12.2019, 11:58
Цитата Сообщение от ReYalp Посмотреть сообщение
Может кто объяснить зачем нужны rvalue ссылки
что бы различать: временный объект? или нет.

зачем это нужно?
допустим у тебя есть функция, которая принимает объект строки по ссылке.
и тебе нужно сделать копию строки:
C++
1
2
3
4
5
void foo(std::string& src)
{
    auto copy = src;
    ...
}
что бы сделать копию, придется выделить память под новую строчку.
а потом скопировать все символы.
это довольно медленно.

но если бы ты мог знать заранее, что объект src - временный,
а значит он не жилец.
и подохнет сразу же, как только завершится все выражение,
то ты мог бы и не делать глубокое копирование объекта,
а просто перенацелить указатели:

C++
1
2
copy.m_ptr = src.m_ptr;  // теперь данными владеет копия
src.m_ptr = nullptr; // оригинальный же объект зануляем, делая его пустым
этот трюк с ограблением объекта ещё называют "опустошением" или "перемещением".
данные были перемещены из временного объекта в объект-копию.

что бы провернуть такой трюк нужно уметь отличать кто здесь временный,
а кто - обычный.
3
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.12.2019, 11:58
Зачем нужны rvalue ссылки, если есть универсальные ссылки
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
17.12.2019, 11:59
Лучший ответ Сообщение было отмечено ReYalp как решение

Решение

Цитата Сообщение от ReYalp Посмотреть сообщение
зачем нужны rvalue ссылки
Короткий ответ: чтобы привязывать к ним временные объекты неявно, а невременные - явно.

На самом деле фиг новичок это все правильно поймет, если не будет знать "как оно было раньше". Поэтому
самый короткий путь, взять std::auto_ptr и разобраться как он работает. А также разобраться (не прочитать где-то, а прямо на своей шкуре прочувствовать) все его недостатки. Вот засесть на неделю, больше ничем не заниматься и разобраться.

Дальше будет сильно понятнее.
3
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
17.12.2019, 12:03
Цитата Сообщение от DrOffset Посмотреть сообщение
std::auto_ptr и разобраться как он работает
на что конкретно нужно обратить внимание в его работе?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
17.12.2019, 12:05
Цитата Сообщение от _stanislav Посмотреть сообщение
на что конкретно нужно обратить внимание в его работе?
На то, как передается владение динамической памятью от одного объекта auto_ptr другому.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
17.12.2019, 12:06

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Вот засесть на неделю, больше ничем не заниматься и разобраться.
недели может не хватить, я когда начинаю разбираться с прикладным уровнем могу спокойно оказаться на физическом.

1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
17.12.2019, 12:07
Самое главное надо выяснить почему нельзя было проще.
"Дизайн и эволюцию С++" Страуструпа почитать, главу про ссылки.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
17.12.2019, 12:07
Цитата Сообщение от DrOffset Посмотреть сообщение
Самое главное надо выяснить почему нельзя было проще.
"Дизайн и эволюцию С++" Страуструпа почитать, главу про ссылки.
этот совет внушает надежду
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
17.12.2019, 12:09
_stanislav, дольше - не страшно. Плохо, когда меньше. не, есть конечно одаренные люди, быстро и правильно все понимающие
Но практика показывает, что если новичок говорит через 30 минут "я сделал", то нифига он не сделал на самом деле. Посмотрел пару видосиков, почитал хабр, вроде чего-то понял и успокоился.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
17.12.2019, 12:13  [ТС]
DrOffset, так с чего начать ,со Страуструпа или auto_ptr?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
17.12.2019, 12:14
ReYalp, объяснять не хочется я думаю потому, что любое объяснение повлечет еще больше вопросов чем было.
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
17.12.2019, 12:19  [ТС]
_stanislav, та я понял,я особо не надеялся что кто-то будет мне объяснять ,меня просто иногда бесит что какая-то тема осталась мною не до конца понята, а эта тема оказалась самой запутанной для меня т.к. информации очень много , а что конкретно читать и что лучше - не понятно
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
17.12.2019, 12:20
Цитата Сообщение от ReYalp Посмотреть сообщение
Страуструпа или auto_ptr
Я бы Страуструпа читанул, потом указатели бы зачитал
потом Мейерса соответствующую тему. (ГЛАВА 5 Rvalue ссылки, семантика перемещении и прямая передача)
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
17.12.2019, 12:21
Цитата Сообщение от ReYalp Посмотреть сообщение
так с чего начать ,со Страуструпа или auto_ptr?
С отказа на какое-то время от C++11.
Когда станут понятны проблемы, решаемые нововведениями, вопросов будет гораздо меньше.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
17.12.2019, 12:21
---
0
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
17.12.2019, 12:23  [ТС]
Croessmah, в новом(2017) стандарте не используют rvalue ссылки или я что-то не так понял?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
17.12.2019, 12:45
Цитата Сообщение от ReYalp Посмотреть сообщение
так с чего начать ,со Страуструпа или auto_ptr?
Ну когда вы будете разбираться с auto_ptr, у вас неминуемо появятся вопросы почему именно так сделано (если не появились, значит вы что-то делаете не так), и вот тогда вам в этом поможет Страуструп
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2019, 12:45
Помогаю со студенческими работами здесь

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

STL и rvalue ссылки
Привет. Помню как-то читал инфу о том, что в стандартных контейнерах rvalue работают, как lvalue. Те имеется ввиду, что имеется два...

RVALUE ссылки и операции с ними
Господа знатоки у меня вопрос следующий. Увидел недавно такую запись &quot;T&amp;&amp; a&quot;, узнал что это rvalue ссылки, вроде как разобрался что это и...

Запретить initializer-list конструктору принимать rvalue значения/ссылки
Здравствуйте! Опишу проблему из заголовка поста на примере... Допустим есть шаблонный класс с initializer-list конструктором: ...

Ссылка на rvalue, является ли она сама rvalue?
А верно ли, что ссылка на rvalue сама не является rvalue? Вот такой код является валидным: #include &lt;iostream&gt; int main() { ...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru