Я видел, что он сказал, что a operator=
, записанный для принятия параметра того же типа по-значению, служит как оператором присваивания копии, так и оператором присваивания перемещения в С++ 11:
Foo& operator=(Foo f)
{
swap(f);
return *this;
}
Если альтернатива будет более чем в два раза больше строк с большим количеством повторений кода и потенциальной ошибкой:
Foo& operator=(const Foo& f)
{
Foo f2(f);
swap(f2);
return *this;
}
Foo& operator=(Foo&& f)
{
Foo f2(std::move(f));
swap(f2);
return *this;
}
В каких обстоятельствах перегрузка ref-const и r-значение предпочтительнее
передавать по значению или когда это необходимо? Я думаю о std::vector::push_back
,
например, который определяется как две перегрузки:
void push_back (const value_type& val);
void push_back (value_type&& val);
Следуя первому примеру, где pass by value используется для копирования
оператора и оператора назначения перемещения, не может push_back
быть определен в
Стандарт должен быть одной функцией?
void push_back (value_type val);