#c #c 11
Вопрос:
я не совсем понимаю этот ответ. Почему мы все не используем тип с std::move?
Пример;
std::map<int, int> try;
void foo(std::map<int, int>amp; try, int t1, int t2)
{
try.emplace(std::move(t1), std::move(t2));
}
int main()
{
int k = 1;
int v = 5;
try.emplace(k , v); // emplace copies
foo(try, k, v); // emplace referance
return 0;
}
так в чем же заключаются различия между копиями и ссылками на место? Я знаю, что std::перемещение более эффективно, чем использование копий. (если я ошибаюсь, извините. Я новичок) Так что я могу использовать? Использование копий или std::перемещение? Извините за мой плохой английский.
Комментарии:
1. Обратите внимание, что вы не можете использовать
try
в качестве имени переменной — это зарезервированное слово.2. У An
int
нет управляемых ресурсов для перемещения, поэтому перемещение anint
в точности совпадает с копированием anint
.3. @Eljay спасибо за ваш ответ!
4. Потому что даже с
int
учетом значения может измениться — жить — godbolt.org/z/xrW419cPr и тогда у вас больше не будет этой ценности.
Ответ №1:
Причина того, что объект не всегда перемещается, заключается в том, что после перемещения объекта у вас его больше нет.
void f()
{
Object o;
o.stuff();
SomeFunctionTakingAReference(o);
o.stuff(); // your o object is still usable
SomeFunctionTakingAReference(std::move(o));
// Here your o object is not valid anymore. It's gone and you have a valid but different object
Комментарии:
1. Я бы не сказал «больше не действует», это слишком двусмысленно. Объект существует и может быть использован, но его значение исчезло (перенесено в другой объект того же типа).