Mediumdecltypeauto
Чем decltype отличается от auto?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
`auto` выводит тип по правилам инициализации шаблона (отбрасывает top-level const/ref). `decltype(expr)` даёт объявленный тип expr, сохраняя const/ref.
int x = 5;
decltype(x) a; // int
decltype((x)) b = x; // int& — скобки делают lvalue
const int& cr = x;
auto a1 = cr; // int (const/ref отброшены)
decltype (cr) a2 = cr; // const int& (сохранены)
decltype(auto) a3 = cr; // const int& (как decltype)Правило для decltype(expr): T если prvalue, T&& если xvalue, T& если lvalue. decltype(auto) удобен для perfect forwarding возвращаемых значений.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.