rust引用变量定义时类型声明的特殊用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ssss1223ss/article/details/89080485

先看下面2段代码,代码A:

let mut a = 12;
let b = &mut a;
let c = b;
*c  = 123;
println!("{}", b);

代码B:

let mut a = 12;
let b = &mut a;
let c: &mut i32 = b;
*c  = 123;
println!("{}", b);

唯一区别就是变量c的定义不同,代码A使用了类型推导,代码B使用了类型声明。**代码A**无法编译通过,编译提示b已经被moved,而代码B可以在edititon 2018编译通过,因为默认开启了NLL

第一感觉,两种写法都是定义了一个&mut i32变量,而&_ mut未实现Copy traits,赋值给c之后b会被move掉。但实际情况是代码B中c只是*b的引用,因为NLL缘故,*c=123之后c引用不再使用,b可以再次使用。代码B我认为可解释为变量绑定到引用变量。

github上两年前有人提issuerust核心成员回复这是正确行为,但不是最好的行为,后期会考虑修改。

猜你喜欢

转载自blog.csdn.net/ssss1223ss/article/details/89080485
今日推荐