c ++ 11 passagem de parâmetros ótima
Considere estas classes:
<code>#include <iostream> #include <string> class A { std::string test; public: A (std::string t) : test(std::move(t)) {} A (const A & other) { *this = other; } A (A && other) { *this = std::move(other); } A & operator = (const A & other) { std::cerr<<"copying A"<<std::endl; test = other.test; return *this; } A & operator = (A && other) { std::cerr<<"move A"<<std::endl; test = other.test; return *this; } }; class B { A a; public: B (A && a) : a(std::move(a)) {} B (A const & a) : a(a) {} }; </code>
Ao criar umB
, Eu sempre tenho um ótimo caminho para frenteA
, um movimento para rvalues ou uma cópia para lvalues.
É possível obter o mesmo resultado com um construtor? Não é um grande problema neste caso, mas e quanto a múltiplos parâmetros? Eu precisaria de combinações de todas as ocorrências possíveis de lvalues e rvalues na lista de parâmetros.
Isso não está limitado a construtores, mas também se aplica a parâmetros de função (por exemplo, setters).
Nota: Esta questão é estritamente sobreclass B
; class A
existe apenas para visualizar como as chamadas de cópia / movimentação são executadas.