Когда перегрузка проход по ссылке (l-значение и r-значение) предпочтительнее передачи по значению?
Я видел, что сказано, чтоoperator=
записанный для получения параметра одного и того же типа по значению служит как оператором копирования, так и оператором перемещения в C ++ 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-to-const и r-value передавать по значению или когда это необходимо? Я думаю оstd::vector::push_back
Например, который определяется как две перегрузки:
void push_back (const value_type& val);
void push_back (value_type&& val);
Следуя первому примеру, где передать по значениюслужит оператором копирования и оператором перемещенияне могpush_back
определиться в Стандарте как отдельная функция?
void push_back (value_type val);