В Rust есть две возможности взять ссылку
-
Взять напрокат, т. Е. Взять ссылку, но не разрешать изменять объект назначения. Оператор
&
заимствует собственность у значения. -
Занимать изменчиво, т. Е. Брать ссылку для изменения цели. Оператор
&mut
изменчиво заимствует собственность у значения.
Документация Rust о правилах заимствования гласит:
Во-первых, любой заем должен длиться в объеме, не превышающем возможности владельца. Во-вторых, у вас может быть один или другой из этих двух видов заимствований, но не оба одновременно:
- одна или несколько ссылок (
&T
) на ресурс,- ровно одна изменяемая ссылка (
&mut T
).
Я считаю, что взятие ссылки - это создание указателя на значение и доступ к значению по указателю. Это может быть оптимизировано компилятором, если есть более простая эквивалентная реализация.
Однако я не понимаю, что означает этот шаг и как он реализован.
Для типов, реализующих свойство Copy
это означает копирование, например, присваивая структуру по элементам из источника, или memcpy()
. Для небольших структур или для примитивов эта копия эффективна.
А для переезда?
Этот вопрос не является дубликатом Что такое семантика перемещения? потому что Rust и C++ - это разные языки, а семантика перемещения различна.