Harddecltypeauto

Что такое decltype(auto) и когда он полезен?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`decltype(auto)` (C++14) — использует правила decltype для вывода типа из инициализатора, сохраняя const и ссылочность. Обычный auto их отбрасывает.

const int& ci = x;
auto a = ci;            // int (потеряны const и &)
decltype(auto) b = ci;  // const int& (сохранены)

// Полезен в шаблонах для forwarding return type
template<class T>
decltype(auto) f(T&& x) {
    return std::forward<T>(x).foo();  // сохранит const& если foo() возвращает ссылку
}

Главное отличие: decltype сохраняет const/&/&&, auto — теряет.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.