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.

questionAnswers(3)

yourAnswerToTheQuestion