Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
-23 / 4 / 0
Регистрация: 15.08.2014
Сообщений: 493

Как работает перемещение и rvalue в моем примере ?

06.07.2024, 22:17. Показов 1976. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Помогите, пожалуйста, понять rvalue и семантику перемещения на следующем примере:

насколько я понимаю такого рода пример должен приводить к перемещению значения строки s,
т.е. она должна остаться пустой, однако этого не происходит.
Почему ?
В этом примере это вообще невозможно, он некорректен ?
Или возможно, но я что-то не так сделал ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
 
void rv(std::string&& s_rv){
   ... делаем что-то со строкой s_rv
 
   std::string s2 = s_rv;
 
}
 
main() {
   std::string s = "123";
 
   rv(std::move(s));
 
   std::cout << s << std::endl;
 
   // здесь вывод = "123". Почему ? Это конструкция не переместит значение
   // значение строки из  s?
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2024, 22:17
Ответы с готовыми решениями:

Объясните как работает полиморфизм на моем примере
Здравствуйте уважаемые. Пожалуйста объясните на моем примере, как это работает. Выдержки из моего кода. class Instrumenti { ...

Объяснить как работает рекурсивная функция и стек вызовов на моем примере
Объясните пожалуйста как работает рекурсивная функция и стек вызовов на моем примере. Здесь известный алгоритм &quot;Разделяй и...

Обращение к модулю по имени. В скачанном примере работает, в моём нет
Нашёл модуль глобального обработчика ошибок. Честно всё скопировал, но у меня стал ругаться. Сам класс называется &quot;CError&quot;. ...

22
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
08.07.2024, 22:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SmallEvil Посмотреть сообщение
Последняя barfoo, с двумя перегрузками, покрывает все случаи, конечно, если это необходимо. При этом ничего не копируется и не перемещается. При этом ничего не копируется и не перемещается.
Если функции barfoo нет необходимости модифицировать свой параметр, то тогда достаточно одного варианта - barfoo(const A &).

А вот если функции barfoo нужно модифицировать свой параметр, то вариант barfoo(const A &) будет скорее всего вынужден сделать копию своего параметра внутри функции. То есть копирование при этом все-таки будет, просто оно будет упрятано внутрь функции, а не привязано к параметру.

В такой ситуации может оказаться разумнее написать просто одну-единственную barfoo(A) вместо двух вариантов, т.е. с передачей по значению. Эффективность варианта barfoo(const A &) при этом не упадет, ибо копирование этот вариант и так делал. Оно теперь просто переместилось на параметр.

Эффективность варианта barfoo(A &&) немножко упадет, ибо в исходном варианте перемещение было не нужно, а здесь понадобится одно перемещение. Но в большинстве случаев цента такого перемещения - невелика, а взамен мы получаем одну функцию вместо двух. В случае, когда параметров много, это также позволяет избежать комбинаторного взрыва вариантов.

Поэтому общее правило таково: если вам нужно выжать последние такты производительности на основе move semantics, то пишите две функции: const A & и A &&. А если такого "выжимания" не требуется (что составляет 99%) - пишите одну с передачей по значению A. Вы получите практически всё от move semantics, но без необходимости писать две функции.
1
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,292
09.07.2024, 08:06
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
то пишите две функции: const A & и A &&.
как вариант - шаблон с форвардом
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
09.07.2024, 08:12
Цитата Сообщение от Алексей1153 Посмотреть сообщение
как вариант - шаблон с форвардом
Это если функция просто форвардит аргументы дальше. Я же вел речь о ситуации, когда рассматриваемая функция уже является конечным получателем аргументов, т.е. реализует оконечную функциональность, работает с аргументами сама.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.07.2024, 08:12

Как использовать пример наследование моем примере?
Я сделал в windows forms Чтение и запись данных в файл Вот код: namespace test_3 { public partial class Form1 : Form { public...

Обьясните как дублировать...на моём примере пожалуйста!!!
Вводится длина одномерного массива, состоящего из целых чисел, и его элементы. продублировать элементы, являющиеся числами Фибоначчи; ...

Как работать с двумерными массивами через указатель на моем примере?
Имеются одномерные массивы {x}_{k} и {x}_{i}, с которыми я работаю через указатель. Например: void x (double *xk, double *xi, double...

Не работает javasript анимация на моем сайте. На отдельной html странице работает, на моем не хочет
&lt;html&gt; &lt;head&gt;&lt;title&gt;Линейное движение картинки&lt;/title&gt; &lt;script&gt; function init_move() { dx = 8 // приращение по осям ...

Как сделать так, чтобы айдишники самостоятельно проставлялись? покажите пожалуйста на моем примере
здесь коды проставлены вручную --создание таблицы поставщик create table posta( Kod_posta integer primary key, FIO_posta...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 25.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru