Ответ 1
Итак, показан ли пример показанному правильному поведению?
Да, поведение, показанное в примере, является единственным поведением, разрешенным стандартом. Это потому, что std::move
не перемещается. Движущиеся объекты перемещают конструкторы и переносят операторы присваивания.
Все std::move
это изменение lvalue в значение x, так что оно может связываться с rvalue-ссылками. Он не вызывает какой-либо конструктор или что-то еще. Изменение категории значений происходит на уровне типа. Во время выполнения ничего не происходит.
Ссылки Rvalue по-прежнему являются ссылками: они относятся к исходному объекту. Функция увеличивает исходное целое число по заданной ссылке.
Если функция принимает аргумент по ссылке, копий и ходов не происходит: исходный объект привязан к ссылке.
Если функция принимает аргумент по значению, у нас может быть движение.
Однако основные типы не имеют конструкторов перемещения. В этом случае происходит деградация копий.