【发布时间】:2021-06-12 12:45:29
【问题描述】:
我发现 &(*&a) 和 &{*&a} 的行为不同,这让我很困惑。
具体来说,以下代码编译失败:
struct CanNotCopy;
fn main(){
let a = CanNotCopy;
&{*&a};
let c = a;
}
并编译如下代码:
struct CanNotCopy;
fn main(){
let a = CanNotCopy;
&(*&a); // or &*&a;
let c = a;
}
以上代码在语义上有什么区别?
准确地说,哪些语言结构会导致所有权转移?
【问题讨论】:
-
()和{}本身是不同的,第一个只是修改了操作的顺序,而第二个创建了一个新的嵌套范围。 -
@Netwave 感谢您的评论。我知道
()和{}在概念上是不同的,但是更精确的描述(例如,转移所有权的语言结构列表)会让事情更清楚。很抱歉,我尝试过并没有在互联网上找到此类材料。语言参考确实描述了这些东西,但是对于初学者来说阅读语言参考太难了。 -
Block Expressions,最后一段(在最后一个代码 sn-p 之前)。
-
@Masklinn 有帮助!