В этом случае разница в производительности отсутствует.
std::move(myArr)
создаст постоянную ссылку на myArr. Теперь, поскольку myArr не является модифицируемой привязкой, это недопустимо для ссылки на rvalue, но может связываться с ссылкой на const lvalue. Таким образом, vec(std::move(myArr))
в конечном итоге вызовет конструктор копирования vector
.
То, что вы хотите здесь:
myVec(const std::vector< std::vector<V> > &myArr):vec(myArr) {}; // 1
myVec(std::vector< std::vector<V> > &&myArr):vec(std::move(myArr)) {}; // 2
Теперь вернемся к исходному вопросу, скажем, у вас есть конструкторы, как указано выше. Если вы используете move-ctor (2), вы явно экономите на большом количестве копий. Обратите внимание, что здесь вы moving
являетесь владельцем данных из исходного вектора, так что имейте в виду ваш вариант использования.
Сколько преимуществ
Я просто скажу много.