Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
 Аватар для vab9petryk
2 / 2 / 1
Регистрация: 28.09.2013
Сообщений: 255

Что происходит когда std::move применяется для int?

19.03.2016, 00:41. Показов 7749. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне, вроде бы, понятно как работает std::move() на классах типа string. Но мне непонятно что будет в данном случаи.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main()
{
    int num = 5;
    //int refNum = std::move(num);
    //int &&refNum = std::move(num);
    return 0;
}
Что делает std::move с переменной num? Можно ли после std::move(num) использовать num?

Добавлено через 3 минуты
Эквивалентно ли
C++
1
int refNum  = std::move(num); int refNum = num;
C++
1
int &&refNum = std::move(num); int &refNum = num;
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2016, 00:41
Ответы с готовыми решениями:

Std::move что за зверь?
Есть код Acceptor'a: void SocketWorker::doAccept() { mAcceptor.async_accept(mSocket, (boost::system::error_code ec) { if (!ec...

Vector::swap и std::move - что эффективнее?
Пусть имеется пустой вектор A и заполненный некими данными вектор B. Тогда какой из методов более эффективный: A.swap(B); A =...

Объяснить для чего используется ref и out, точнее их значение и когда применяется
Кто может объяснить для чего используется ref и out, точнее их значение и когда применяется. Я много прочитала но ещё больше запуталась. :)

23
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
29.10.2019, 21:37
Студворк — интернет-сервис помощи студентам
Да, имел в виду нормальный тип, безо всяких ссылок
0
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
01.11.2019, 20:58
Цитата Сообщение от TRam_ Посмотреть сообщение
Optimus11, например у тебя объект с динамически выделенными данными в куче (например тот же std::string, хранящий там строку ). Тебе надо, чтобы эти данные без перевыделения в новом месте и перекопирования из старого места кучи в новое оказались у нового объекта. Вызываешь конструктор перемещения, и у старой std::string отбирают эти данные в куче и передают другой строке. Взамен создаётся выделение для пустой строки.
Для иных случаев конструктор перемещения бесполезен.

Цитата Сообщение от TRam_ Посмотреть сообщение
Optimus11, например у тебя объект с динамически выделенными данными в куче (например тот же std::string, хранящий там строку )
Ну вот предположим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void my_func(string my_string)
{
    cout <<"func:"<< my_string << endl;
        cout <<"adr:"<< &my_string << endl;
}
 
int main()
{
    string string_main = "Hello";
    my_funcas(move(string_main));
 
    cout <<"main:"<< stringis << endl; //ничего не выведется, потому что у string_main реально забрали его значение
То есть значение, которое раньше находилось в переменной string_main, значение которой реально находилось по какому то адресу и занимало 20 байт, теперь по этому адресу нет этого значения, но теперь это значение есть по другому адресу.
То есть std::move именно перемещает переменную или обьект ?

Если да, то
Цитата Сообщение от TRam_ Посмотреть сообщение
Optimus11Тебе надо, чтобы эти данные без перевыделения в новом месте и перекопирования из старого места кучи в новое оказались у нового объекта.
что значит без перекопирования ?? Ведь значение или обьект, как то туда перемещается на новый адрес и занимает новый ячейки памяти ?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
01.11.2019, 22:15
Цитата Сообщение от Optimus11 Посмотреть сообщение
То есть std::move именно перемещает переменную или обьект ?
std::move не делает вообще ничего. Он просто преобразует аргумент к rvalue-ссылке. А вот результат std::move (читай rvalue-ссылка) передаётся как параметр в функцию my_func, это значит, что в этом месте будет вызван перемещающий конструктор std::string, и именно этот перемещающий конструктор перетащит кишки из объекта string_main в тот объект, который станет параметром my_string функции my_func

Т.е. std::move сам по себе ничего не делает, но его использование приводит к тому, что при передаче параметра будет использован перемещающий конструктор, а не копирующий, как это было бы, если бы не было std::move

Добавлено через 7 минут
C++
#include <utility>
#include <cstdio>
 
class my_string
{
public:
  my_string ()                 { std::printf("default constructor\n"); }
  my_string (const my_string&) { std::printf("copy constructor\n"); }
  my_string (my_string&&)      { std::printf("move constructor\n"); }
};
 
void foo (my_string p)
{
}
 
int main (void)
{
  my_string s;
 
  std::printf ("point 1\n");
  foo (s);
  std::printf ("point 2\n");
  foo (std::move (s));
  std::printf ("point 3\n");
}
Code
$ g++ t.cc -std=c++11
$ ./a.out
default constructor
point 1
copy constructor
point 2
move constructor
point 3
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
03.11.2019, 19:34
Цитата Сообщение от Optimus11 Посмотреть сообщение
То есть std::move именно перемещает переменную или обьект ?
Как правильно заметил Evg, std::move никогда ничего никуда не перемещает. И как уже сто раз было сказано, std::move вообще ничего физически не делает. Это просто приведение типа.

Перемещением всегда занимается тот код, который будет работать после std::move. Задача std::move - обеспечить, чтобы вызвалась правильная версия этого кода.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2019, 19:34

Что означает запись std::int?
Подскажите пожалуйста увидела в одном примере перед вектором было std::int я почему то думала что такое не бывает, скажите пожалуйста если...

Что означает std::string to_string( int value )?
Что означает: std::string to_string( int value )

Как проинициализировать std::stack<const int> obj ( std::stack<int>{} );
добрый день. вопрос в коде: http://rextester.com/VCVVML6656 #include &lt;iostream&gt; #include &lt;stack&gt; //-std=c++14...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Что происходит, когда мужчина влюблён?
Когда мужчина влюбляется, он начинает делать несвойственные ему вещи: дарить объекту своей любви цветы (даже если раньше никогда такого не...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru