Mediumautodecltype

Чем decltype отличается от auto?

1Постановка

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

2Решение

`auto` выводит тип из инициализатора, отбрасывая ссылки и const. `decltype(expr)` даёт объявленный тип выражения, сохраняя const и ссылочность.

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

// Полезно для trailing return type
template<class T>
auto f(T& t) -> decltype(t.foo()) { return t.foo(); }

В C++14+ decltype(auto) совмещает: использует правила decltype для вывода из инициализатора. Главное отличие: auto теряет const/&, decltype сохраняет.

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

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

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