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