|
6 / 4 / 2
Регистрация: 01.10.2020
Сообщений: 37
|
|||||||||||
std::move()15.07.2021, 21:46. Показов 1337. Ответов 2
Метки нет (Все метки)
Здравствуйте! Хочу разобраться с функцией std::move(). Код, приведенный ниже работает как и ожидается, значение в переменной str перемещается.
0
|
|||||||||||
| 15.07.2021, 21:46 | |
|
Ответы с готовыми решениями:
2
std::move()
Функция std::move() |
|
Вездепух
12942 / 6809 / 1821
Регистрация: 18.10.2014
Сообщений: 17,234
|
|||
| 15.07.2021, 22:32 | |||
|
У вас в вашем случае речь идет о объекте типа int. Для объекта типа int, как и для любого скалярного типа, семантика перемещения оговорена четко в стандарте языка: перемещение - это просто копирование. Вот вы и получили обыкновенное копирование. Исходное значение при копировании не меняется. Почему вас это удивляет?Значения плоских/одноуровневых объектов невозможно как-то физически "переместить". Их можно только скопировать. Если вы как-то иначе себе представляли перемещение для скалярных объектов - то расскажите нам об этом. Как иначе вы себе представляете перемещение для объектов типа int? Почему вы ожидаете, что значение поменяется? Зачем ему меняться?Добавлено через 4 минуты И непонятно, почему вы сравниваете два разных по сути примера. Почему у вас в первом примере не делается vec.push_back(move(vec[0]));, как это делается во втором? Если бы вы это сделали и в первом примере, то вы бы увидели что там первый элемент вектора тоже остался на своем месте, в начале вектора. Из него бы "ушло" значение (а может и не ушло бы), но сам он бы никуда не делся.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 15.07.2021, 23:04 | |||
|
никого никуда не перемещает. функция получает на входе любой объект, а на выходе возвращает rvalue-reference на этот же самый объект. фактически получается, что функция говорит компилятору: считай, что вот этот вот объект - временный. а раз объект временный, значит его можно смело ограбить. само опустошение (или перемещение) осуществляют уже те функции, которые принимают на входе результат std::move то есть, например вот здесь: в то время как move(vec[0]) лишь возвращает якобы временный объект.при этом важно понимать: бизнес-логика перемещающих функций может быть какой угодно. вот что ты сам напишешь, то и будет. типичная реализация предполагает перемещение только тех классовых объектов, для которых реализованы конструкторы перемещения. в отличие от класса строк, у обычного int нет конструктора перемещения.поэтому, его в принципе невозможно переместить. можно только скопировать. а с другой стороны: просто подумай, и ответь на вопрос: а нафига вообще его куда-то перемещать?
0
|
|||
| 15.07.2021, 23:04 | |
|
Помогаю со студенческими работами здесь
3
Немного не понимаю std::move
Func(std::move(.) копирует ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|