Code review требует убрать std::move из return
std::vector<Row> loadRows(Db& db) {
std::vector<Row> rows;
rows.reserve(db.count());
db.fetchInto(rows);
return std::move(rows); // «чтобы не копировать»
}
Clang выдаёт предупреждение -Wpessimizing-move. Почему std::move здесь вреден?
- Он мешает компилятору применить NRVO
- После std::move вектор возвращается пустым
- std::move в return вызывает копирование
- Возвращать перемещением можно только из шаблонов
