c++11 оптимальная передача параметров

Рассмотрим эти классы:

#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) {}
};

При создании Bу меня всегда есть оптимальный прямой путь для A, один ход для rvalue или одна копия для lvalue.

Можно ли добиться того же результата с помощью одного конструктора? В данном случае это не большая проблема, но как насчет нескольких параметров? Мне понадобятся комбинации всех возможных вхождений lvalue и rvalue в списке параметров.

Это не ограничивается конструкторами, но также относится к параметрам функций (, например. сеттеры ).

Примечание :Этот вопрос строго касаетсяclass B; class Aсуществует только для визуализации того, как выполняются вызовы копирования/перемещения.

8
задан Toby Speight 31 August 2017 в 16:39
поделиться