Вступить в клуб →
средняявопросСовременный C++: move-семантика, шаблоны, лямбды

Обёртка над обработчиком всегда вызывает копирующую перегрузку

void process(const std::string& s);   // копирует внутрь
void process(std::string&& s);        // забирает строку

template <class T>
void traced(T&& arg) {
    trace("process");
    process(arg);
}

traced(std::string(big_buffer));

Даже для временной строки вызывается process(const std::string&). Как исправить обёртку?

  • Передавать дальше std::forward<T>(arg)
  • Передавать дальше std::move(arg) всегда
  • Заменить T&& на const T& в шаблоне
  • Заменить T&& на T и передать arg

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела