c ++ 11 оптимальная передача параметров
Рассмотрим эти классы:
<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>
При созданииB
У меня всегда есть оптимальный путь впередA
, один ход для значений или один экземпляр для значений.
Можно ли добиться того же результата с одним конструктором? В этом случае это не большая проблема, но как насчет множества параметров? Мне понадобятся комбинации всех возможных вхождений lvalue и rvalues в список параметров.
Это не ограничивается конструкторами, но также относится к параметрам функции (например, к установщикам).
Примечание: этот вопрос строго оclass B
; class A
существует только для визуализации того, как выполняются вызовы копирования / перемещения.