Optimale Parameterübergabe in c ++ 11

Betrachten Sie diese Klassen:

<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>

Beim Erstellen einesBIch habe immer einen optimalen Vorwärtspfad fürA, ein Zug für R-Werte oder eine Kopie für L-Werte.

Kann man mit einem Konstruktor dasselbe Ergebnis erzielen? In diesem Fall ist das kein großes Problem, aber wie sieht es mit mehreren Parametern aus? Ich würde Kombinationen von jedem möglichen Auftreten von l-Werten und r-Werten in der Parameterliste benötigen.

Dies ist nicht auf Konstruktoren beschränkt, sondern gilt auch für Funktionsparameter (z. B. Setter).

Hinweis: Bei dieser Frage handelt es sich ausschließlich umclass B; class A existiert nur, um zu visualisieren, wie das Kopieren / Verschieben ausgeführt wird.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage