下面的two assignments有什么区别?
let mut x = 1;
let mut y = x; // (1)
let &mut mut y = &mut x; // (2)
字符串
看起来它们的行为是一样的。#2是否为您提供了#1所不具备的附加功能?
(the mut
在这里容易混淆,但重点是两边都没有&
和两边都没有&
之间的区别)
下面的two assignments有什么区别?
let mut x = 1;
let mut y = x; // (1)
let &mut mut y = &mut x; // (2)
字符串
看起来它们的行为是一样的。#2是否为您提供了#1所不具备的附加功能?
(the mut
在这里容易混淆,但重点是两边都没有&
和两边都没有&
之间的区别)
3条答案
按热度按时间xe55xuns1#
(3)等同于:
字符串
如果
x
的类型是Copy
,那么(2)和(3)是相等的:都创建了一个副本(关于别名有一些深奥的区别((3)使指向x
的现有指针无效,但(2)不会),但通常它们并不重要)。但是,如果
x
不是Copy
,那么(2)将工作并将x
移动到y
中,但(3)不会,因为您无法移出引用。jum4pzuy2#
1.第一个变量是一个可变变量。
x
的所有权被建立1.第二个方法创建一个新的可变变量
y
,并将x
的值赋给它。x
和y
是独立的,因此任何一个变量的值变化都不会影响另一个变量。1.第三个是错误,它试图多次借用可变变量
你在尝试这样的东西吗?:
let y_ref = &mut x;
或here:
字符串
&mut
不是像(2)中那样独立,而是创建一个引用,任何更改都将反映在引用的变量上os8fio9y3#
int y = x;处理所有权并可能复制或移动值,而let &mut mut y = &mut x;(假设预期的语法是let y = &mut x;)创建对同一值的可变引用,而不转移所有权。前者允许独立操作y和x,而后者链接y和x,以便通过y的更改直接影响x