Quando a sobrecarga é passada por referência (valor-l e valor-r) preferida a passagem por valor?
Eu vi isso dito que umoperator=
escrito para obter um parâmetro do mesmo tipo por valor serve como operador de atribuição de cópia e operador de atribuição de movimento em C ++ 11:
Foo& operator=(Foo f)
{
swap(f);
return *this;
}
Onde a alternativa seria mais do que o dobro de linhas com muita repetição de código e potencial para erro:
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;
}
Em que circunstâncias a sobrecarga de ref-para-const e de valor r é preferível para passar por valor, ou quando é necessário? Estou pensando emstd::vector::push_back
, por exemplo, que é definido como duas sobrecargas:
void push_back (const value_type& val);
void push_back (value_type&& val);
Seguindo o primeiro exemplo onde passar por valorserve como operador de atribuição de cópia e operador de atribuição de movimentonão podiapush_back
ser definido no Padrão para ser uma única função?
void push_back (value_type val);