Hardссылки

Что такое reference collapsing и какие правила?

1Постановка

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

2Решение

Reference collapsing — схлопывание ссылок на ссылки в контекстах вывода типов (typedef, decltype, T&& в шаблонах).

T& &    → T&
T& &&   → T&
T&& &   → T&
T&& &&  → T&&

Правило: если хоть одна ссылка `&` — результат `&`. Только && на && даёт &&.

template<class T> void f(T&& x);  // для lvalue U: T = U&, T&& → U& &&
                                     //   схлопывается до U&

Без reference collapsing forwarding references были бы невозможны.

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

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

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