170 похожих чатов

KV::KV(Std::String&& key, std::string&& value) : m_key(key), m_value(value) {} Можно ли так

делать? Будет ли тут перемещение?

21 ответов

9 просмотров

Не будет. Надо читать про мув-семантику

Можно Не будет

Eyed-Shovel Автор вопроса
Liber Azerate
Не будет. Надо читать про мув-семантику

Я помню, что string и r-value не дружат. А как сделать, чтобы было?

Eyed Shovel
Я помню, что string и r-value не дружат. А как сде...

Дело не в строке. Дело в непонимании мув-семантики

Можно. Нужен std::move, в твоем коде две копии

Eyed-Shovel Автор вопроса
Artöm Bakri Al-Sarmini
Можно. Нужен std::move, в твоем коде две копии

Почему? m_key = key. Справа r-value reference. Почему не вызовется оператор присваивания перемещением?

Eyed Shovel
Почему? m_key = key. Справа r-value reference. Поч...

Потому что тип переменной key T&&, но тип выражения key это T&. В твоем контексте это выражения

Eyed-Shovel Автор вопроса
Artöm Bakri Al-Sarmini
Потому что тип переменной key T&&, но тип выражени...

KV::KV(KV&& kv) : m_key(std::move(kv.m_key)), m_value(std::move(kv.m_value)) { kv.m_key = nullptr; kv.m_value = nullptr; } А это сработает?

Eyed Shovel
KV::KV(KV&& kv) : m_key(std::move(kv.m_key)), m_va...

Да, это хорошо. Но строки нулить лучше через erase

Eyed-Shovel Автор вопроса
Eyed Shovel
Почему?

Во-первых, nullptr тут писать нельзя (смотри (7) https://en.cppreference.com/w/cpp/string/basic_string/operator%3D), можно "". Во-вторых, erase операция более подходящая по контексту, чем присваивание пустой строки

Eyed Shovel
Всё равно этого не понял. Аргумент же T&&...

А выражение T&. Если не хочешь читать, я могу найти видео с выступлением Мейерса об этой теме

Eyed Shovel
Всё равно этого не понял. Аргумент же T&&...

Открываем cppreference The following expressions are lvalue expressions: the name of a variable, a function, a template parameter object (since C++20), or a data member, regardless of type, such as std::cin or std::endl. Even if the variable's type is rvalue reference, the expression consisting of its name is an lvalue expression;

Yurij horssyyy
Открываем cppreference The following expressions a...

Он не понимает разницу между переменной и выражением

Eyed-Shovel Автор вопроса
Artöm Bakri Al-Sarmini
Он не понимает разницу между переменной и выражени...

Я не понимаю, что подразумевается под словом "выражение"

Eyed Shovel
Я не понимаю, что подразумевается под словом "выра...

На том же сайте есть про выражения и что это такое

Ну и отвечая на твой вопрос - нет. Move это static_cast (с remove_reference) к T&&, а как ты видишь тут никакого каста нет.

Похожие вопросы

Обсуждают сегодня

Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
было так ;void set_http_ver(RESPD* ptr, char* version, uint32_t length) // example: 'RTSP/1.1 ' set_http_ver: mov eax, [esp + 4] mov ecx, [esp + 8] ...
Mixail Frolov
5
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Карта сайта