Mediummovervalue

Что такое rvalue-ссылка (T&&) и для чего она нужна?

1Постановка

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

2Решение

`T&&` — rvalue-ссылка, привязывается к временным объектам и результатам std::move. Главная цель — move-семантика: move-конструктор крадёт ресурсы вместо копирования.

std::string make() { return "hello"; }
std::string&& r = make();        // привязка к rvalue

class Buffer {
    int* data_;
    size_t n_;
public:
    // Move-конструктор: крадём ресурсы, не копируем
    Buffer(Buffer&& o) noexcept
        : data_(o.data_), n_(o.n_) {
        o.data_ = nullptr; o.n_ = 0;  // оставляем other в валидном состоянии
    }
};

Важно: имя rvalue-ссылки внутри функции — это lvalue. Чтобы переместить ещё раз, нужен std::move.

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

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

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