Hardreference-collapservalue

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

1Постановка

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

2Решение

Reference collapsing — правило формирования типа «ссылки на ссылку». В C++ нет ссылок на ссылки явно, но они возникают при выводе шаблонов и typedef/using. Четыре правила:

T&  &   → T&
T&  &&  → T&
T&& &   → T&
T&& &&  → T&&
template<typename T> void f(T&& x);
int a = 1;
f(a);          // lvalue: T = int&,  T&& = int& && = int&
f(std::move(a)); // rvalue: T = int, T&& = int&&

Запомнить просто: если хотя бы одна ссылка — lvalue ref, результат lvalue ref. Только rvalue ref на rvalue ref даёт rvalue ref. Это механизм работы forwarding reference.

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

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

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