我发现&(*&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()
和{}
在概念上是不同的,但更精确的描述(例如传递所有权的语言结构列表)将使事情更清晰。很抱歉我已经尝试过了,但并没有在互联网上找到这样的材料。语言参考手册肯定会描述这些内容,但对于初学者来说阅读语言参考手册太难了。 - yslking