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