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 подскажет развёрнутый ответ в реальном времени.