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