Mediumautodecltype
В чём разница между auto, decltype и decltype(auto)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
auto выводит по правилам шаблона (отбрасывает ссылку и top-level const). decltype(expr) даёт тип ровно как объявлено, включая ссылочность. decltype(auto) комбинирует: выводит через decltype от инициализатора.
int x = 5;
int& r = x;
auto a = r; // int
decltype(r) d = r; // int&
decltype(auto) da = r; // int&
// Для perfect forwarding возвращаемого значения:
template<typename T>
decltype(auto) f(T&& x) { return g(std::forward<T>(x)); }Правило decltype: T если expr — prvalue, T&& если xvalue, T& если lvalue. decltype(name) (идентификатор) даёт тип объявления; decltype((name)) (в скобках) — всегда ссылка.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.