Kiedy przeładowanie przechodzi przez referencję (wartość-l i wartość-r) preferowane przez przekazywanie wartości?
Widziałem, że to powiedziałoperator=
napisane w celu pobrania parametru tego samego typu wg wartości służy zarówno jako operator przypisania kopiowania, jak i operator przypisania przeniesienia w C ++ 11:
Foo& operator=(Foo f)
{
swap(f);
return *this;
}
Tam, gdzie alternatywą byłoby więcej niż dwa razy więcej wierszy z dużą ilością powtórzeń kodu i potencjalnym błędem:
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;
}
W jakich okolicznościach przeciążenie ref-to-const i r-value jest preferowane, aby przejść przez wartość lub kiedy jest to konieczne? Myślę ostd::vector::push_back
, na przykład, który jest zdefiniowany jako dwa przeciążenia:
void push_back (const value_type& val);
void push_back (value_type&& val);
Podążając za pierwszym przykładem, w którym przekazujesz wartośćsłuży jako operator przypisania kopii i operator przypisania przeniesienia, nie mogłempush_back
być zdefiniowane w standardzie jako jedna funkcja?
void push_back (value_type val);