Я думал о разработке некоторого именованного кода параметра, но это заставило меня задуматься о некотором коде, подобном следующему:
#include <utility>
int main()
{
using std::make_pair;
auto x = make_pair(1, make_pair(2, make_pair(3, make_pair(4,5))));
}
Теперь наивная реализация этого подойдет "make_pair (4,5)«сначала скопируйте результат во второй элемент« make_pair (3, ...) », а затем скопируйте его во второй элемент« make_pair (2, ...) »и т. д.
Это приведет к производительности O (n ^ 2), к сожалению, с большим количеством ненужных копий.Я не могу понять, как (именованная) оптимизация возвращаемого значения также помогает здесь.
В идеале, make_pair(4,5)
понимает, что это будет в последнем месте x
, и создает себяв этом месте.
Далее:
#include <utility>
int main()
{
using std::make_pair;
auto&& x1 = make_pair(3, make_pair(4,5));
auto x2 = make_pair(1, make_pair(2, std::move(x1)));
}
Я бы хотел избежать копий в коде, подобном этому.
Эта оптимизация настолько очевидна, что яследует предположить, что компиляторы выполняют это, или есть другой способ, которым я должен кодировать это, чтобы избежать копий?