Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
31 / 28 / 3
Регистрация: 10.01.2017
Сообщений: 1,213
1

Отличие std::move от & ?

24.08.2019, 11:59. Показов 866. Ответов 6
Метки нет (Все метки)

Здравствуйте,

Подскажите пожалуйста, никак не могу понять, чем принципиально отличается std::move от & ?

То есть и то и то вроде как ппредача некой ссылки на обьект, а не создание копии обьекта, но в чем отличие ?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2019, 11:59
Ответы с готовыми решениями:

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &)
Добрый день. Как осуществляется выделения памяти под перегруженный оператор ввода данных в...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;)
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H ...

Отличие std::sort От std::qsort
Пишу доклад по программированию, собственно выбрал тему сортировок. вот сейчас хочу расписать...

std::move()
Есть ли разница между следующими вещами: A = std::move(B); // and std::copy(B.begin(),...

6
"C with Classes"
1485 / 1287 / 485
Регистрация: 16.08.2014
Сообщений: 5,414
Записей в блоге: 1
24.08.2019, 12:14 2
Optimus11, https://www.ozon.ru/context/detail/id/34747131/ почитай эту книгу, там объяснений очень много, полнее тебе никто не объяснит. 5 глава, ну и 1 и 2 для лучшего понимания.

Добавлено через 1 минуту
можешь с этого начать

Добавлено через 5 минут
еще вот, вот и вот, еще вот.
2
749 / 352 / 72
Регистрация: 10.06.2014
Сообщений: 2,371
24.08.2019, 12:23 3
Автор, это не одно и то же.
move и ссылка делают разные вещи
0
Эксперт С++
1595 / 927 / 777
Регистрация: 06.02.2016
Сообщений: 2,412
Записей в блоге: 29
25.08.2019, 10:43 4
Move просто кастит к rvalue(xvalue)-ссылке (&&).
Вот как выглядит его примерная реализация

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// c++11
template <typename T>
typename std::remove_reference<T>::type&& move(T&& value)
{
    using RType = typename std::remove_reference<T>::type&&;
    return static_cast<RType>(value);
}
 
//c++14
template <typename T>
decltype(auto) move(T&& value)
{
    using RType = std::remove_reference_t<T>&&;
    return static_cast<RType>(value);
}
1
31 / 28 / 3
Регистрация: 10.01.2017
Сообщений: 1,213
25.08.2019, 12:02  [ТС] 5
Спасибо!
По рекомендации прочитал 5 главу Майерса "эффективный и современный с++", но даже и близко не смог понять, зачем нужны эти некие временнын rvalue обьекты.
0
Эксперт С++
1595 / 927 / 777
Регистрация: 06.02.2016
Сообщений: 2,412
Записей в блоге: 29
25.08.2019, 12:08 6
Цитата Сообщение от Optimus11 Посмотреть сообщение
ачем нужны эти некие временнын rvalue обьекты
Нужны для обеспечения мув семантики. Она и ряд оптимизаций компилятора позволяет переместить объект вместо его копирования, что увеличивает производительность
0
"C with Classes"
1485 / 1287 / 485
Регистрация: 16.08.2014
Сообщений: 5,414
Записей в блоге: 1
25.08.2019, 20:41 7
Цитата Сообщение от Peoples Посмотреть сообщение
Move просто кастит к rvalue(xvalue)-ссылке (&&).
нужно время что бы это понять, и некий опыт наверное, зря ты ему такие весчи двигаешь.

Добавлено через 50 секунд
Цитата Сообщение от Optimus11 Посмотреть сообщение
По рекомендации прочитал 5 главу Майерса "эффективный и современный с++", но даже и близко не смог понять, зачем нужны эти некие временнын rvalue обьекты.
еще раз по два раза зачитай , все то что я тебе скинул.

Добавлено через 50 секунд
все ссылки, потом сам поймешь, где я порядок нарушил, от сложного к простому.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2019, 20:41

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Std::move
Добрый вечер, #include &lt;iostream&gt; using namespace std; class A { private: int x = 10; ...

Parse_matrix(std::istream& in); std::istream& in что это значит?
Есть функция которую необходимо описать: std::pair&lt;int, int&gt; parse_matrix(std::istream&amp; in){ ...

Функция std::move()
struct DotPosition { long x; long y; }; std::vector&lt;DotPosition&gt; dots; DotPosition dot;...

Optional и std::move
добрый день. разбираясь в исходниках optional'а из gcc, я понял, что там нигде не делается...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.