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